思路:
把數字轉換成為二進制時不用反轉,直接下標從最高位開始比較方便,只有最后為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;}
新聞熱點
疑難解答