国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

算法訓練 2的次冪表示

2019-11-10 23:48:43
字體:
來源:轉載
供稿:網友
算法訓練 2的次冪表示  時間限制:1.0s   內存限制:512.0MB    問題描述  任何一個正整數都可以用2進制表示,例如:137的2進制表示為10001001。  將這種2進制表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0  現在約定冪次用括號來表示,即a^b表示為a(b)  此時,137可表示為:2(7)+2(3)+2(0)  進一步:7=2^2+2+2^0 (2^1用2表示)  3=2+2^0   所以最后137可表示為:2(2(2)+2+2(0))+2(2+2(0))+2(0)  又如:1315=2^10+2^8+2^5+2+1  所以1315最后可表示為:  2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)輸入格式  正整數(1<=n<=20000)輸出格式  符合約定的n的0,2表示(在表示中不能有空格)樣例輸入137樣例輸出2(2(2)+2+2(0))+2(2+2(0))+2(0)樣例輸入1315樣例輸出2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)提示  用遞歸實現會比較簡單,可以一邊遞歸一邊輸出

思路:

把數字轉換成為二進制時不用反轉,直接下標從最高位開始比較方便,只有最后為0,1,2的時候進行特殊處理就可以,也就是遞歸出口。其他的情況全部用遞歸實現就可以了。

代碼:

#include<iostream>#include<string>#include<cstring>#include<algorithm>using namespace std;string binary(int num){    string s="";    while(num)    {        if(num%2)s+="1";        else s+="0";        num/=2;    }    return s;}void slove(string s){    int len=s.length();    for(int i=len-1;i>=0;i--)    {        if(s[i]=='0')            continue;        if(i>2)        {            PRintf("2(");            string str=binary(i);            slove(str);            printf(")");            int flag=0;            for(int j=i-1;j>=0;j--)                if(s[j]=='1')                {                    flag=1;                    break;                }            if(flag)                printf("+");        }        else if(i==2)        {            printf("2(2)");            if(s[i-1]=='1'||s[i-2]=='1')printf("+");        }        else if(i==1)        {            printf("2");            if(s[i-1]=='1')printf("+");        }        else if(i==0)            printf("2(0)");    }}int main(){    int num;    scanf("%d",&num);    string s=binary(num);    slove(s);    printf("/n");    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北川| 惠水县| 唐海县| 辽阳市| 北宁市| 宿迁市| 剑阁县| 天镇县| 古交市| 信丰县| 葫芦岛市| 独山县| 鄂托克旗| 卢湾区| 鄯善县| 齐河县| 连山| 调兵山市| 成武县| 藁城市| 甘孜县| 抚顺县| 密云县| 潍坊市| 谷城县| 桂林市| 嵩明县| 威信县| 莫力| 鲁甸县| 信宜市| 曲水县| 金门县| 区。| 奉节县| 北辰区| 永平县| 安义县| 吉安市| 任丘市| 寻甸|