日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方

發(fā)布時(shí)間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目鏈接】

ybt 1208:2的冪次方表示
OpenJudge 2.2 8758:2的冪次方表示
洛谷 P1010 [NOIP1998 普及組] 冪次方

【題目考點(diǎn)】

1. 遞歸

【解題思路】

  • 遞歸問題:將數(shù)字k轉(zhuǎn)為2的冪次方表示的字符串
  • 遞歸關(guān)系:
    二進(jìn)制按位權(quán)展開式形式如下:
    k=d0?20+d1?21+...+dk?2kk = d_0*2^0+d_1*2^1+...+d_k*2^kk=d0??20+d1??21+...+dk??2k
    將數(shù)字k轉(zhuǎn)為二進(jìn)制數(shù),即為在二進(jìn)制下作數(shù)字拆分,與十進(jìn)制數(shù)字拆分類似。

    例:下面的代碼為將數(shù)字k轉(zhuǎn)為二進(jìn)制并逆序輸出

    for(int a = k; a > 0; a /= 2)cout << a%2; 拆分出的第0個(gè)數(shù)字為d0d_0d0?,位權(quán)為202^020,第1個(gè)數(shù)字為d1d_1d1?,位權(quán)為212^121…,第i個(gè)數(shù)字為did_idi?,位權(quán)為2i2^i2i
    將k在二進(jìn)制下作數(shù)字拆分,如果第i次拆分出的數(shù)字did_idi?為0,則略過。如果第i次拆分出的數(shù)字did_idi?不為0,則看i的值。
    • 如果i為0,那么這一項(xiàng)為2(0)
    • 如果i為1,那么這一項(xiàng)為2
    • 如果i大于1,那么這一項(xiàng)為2(s),括號(hào)里的字符串s為將數(shù)字i轉(zhuǎn)為2的冪次方表示的字符串,可以通過遞歸調(diào)用本函數(shù)得到。
  • 遞歸出口:
    • 如果i為0或i為1的情況就是遞歸出口。

【題解代碼】

解法1:遞歸

#include<bits/stdc++.h> using namespace std; string solve(int k) {string s;for(int a = k, i = 0; a > 0; a /= 2, i++)//其中一項(xiàng)為a%2*2^i{if(a%2 == 1){if(i == 0)s = "2(0)+" + s;//逆序構(gòu)造字符串,需要將新得到的字符串接在s的前面 else if(i == 1)s = "2+" + s;elses = "2(" + solve(i) + ")+" + s; }}s.pop_back();//如果如上述方法構(gòu)造字符串,最后末尾會(huì)多一個(gè)"+",將這個(gè)"+"刪掉。return s; } int main() {int n;cin >> n;cout << solve(n);return 0; }

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。