刚刚笔试下来,这题没有弄明白(可能大家觉得都很简单吧),所以下来想了想,
和实验室讨论了下,方法当时也想到的。即,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");
}
更大的数的求法也大同小异了