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

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

算法訓練 2的次冪表示

2019-11-10 23:58:01
字體:
來源:轉載
供稿:網友
算法訓練 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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉林市| 安宁市| 安阳市| 改则县| 台山市| 行唐县| 思南县| 樟树市| 若尔盖县| 襄汾县| 五寨县| 通辽市| 武乡县| 巨鹿县| 诸暨市| 板桥市| 汤阴县| 泸州市| 集贤县| 新乡县| 淮北市| 兴安县| 绥江县| 邵阳市| 鱼台县| 和田市| 雅安市| 大冶市| 开封市| 马鞍山市| 桃源县| 双柏县| 灵宝市| 台南市| 拉萨市| 乌鲁木齐市| 葵青区| 丰顺县| 金川县| 高阳县| 独山县|