#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int a[1000]; //预留1000个元素,从小到大,按个十百千万的顺序一直排列
for(i = 0; i < 1000;i++) //除了a[0]为1,其他都是0
{
a[i] = 0;
}
a[1] = 1;
for(i = 0; i < 1000;i++) //完成2的1000次方,每次循环结果都是乘完之后的数字
{
for(j = 0;j < 1000;j++)//每个元素都乘2,相当于整体乘2,但是还没有进位
{
a[j] *= 2;
}
for(j = 0;j < 1000;j++)//完成进位,每一个元素都要通过判断,只要大于9就进位
if(a[j] > 9)
{
a[j] = a[j] % 10;
a[j + 1]++;
}
}
for(i = 0;i < 1000;i++) //输出模块,因为数组前面还有许多0.毕竟最后的数字肯定没有一千位
{
if(a[1000 -i -1] != 0) //出现第一个非零,代表结果数字出现了,跳出,开始printf
{
break;
}
}
for(;i < 1000;i++) //输出从倒数第一个非零开始,因为要继承上面的i,所以不初始化
{
printf("%d",a[1000 -i -1]);
}
printf("\n");
return 0;
}
结果如上图。
总结:核心就是通过数组表示结果,每一位数组都是一位,然后倒序输出,乘2就for循环全部乘2,但是别忘了进位,for循环里面加一个if只要该位大于9,就a[j + 1]++。最后别忘了倒序输出就行了。