刚刚笔试下来,这题没有弄明白(可能大家觉得都很简单吧),所以下来想了想,
和实验室讨论了下,方法当时也想到的。即,89个1的处理。
1=1
11=21+1
111=2(21+1)+1
1111=2(22+21+1)+1
... ...
89个1的十进制我们用10个数组存储。当低位数组表示的数超过了我们设定的值,高位进1即可。代码如下:
#include <iostream>void main(){
int a[10]={0}; for(int i=1;i<=90;++i) { for(int j=9;j>=0;--j) { a[j]*=2; } for(int j=9;j>=0;--j) { if(a[j]>10000) // { a[j-1]+=1; a[j]-=10000; } } a[9]+=1; } for(int i=0;i<=9;++i) { if(a[i]!=0) std::cout<<a[i]; } system("Pause");}
更大的数的求法也大同小异了
转载于:https://www.cnblogs.com/Akunwjy/p/bisi.html