2^15=32768 sum=3+2+7+6+8=26 求2^1000的位数和
数字这么大第一想法是利用一个数组存储结构的每个位,从1开始乘,每次乘2,当其大于10的时候,就进位。
代码如下:
#include <stdio.h>
#include <stdlib.h>
// 利用哨兵sentry代表进位
int main()
{
int a[400];
int i,j,t=0,nb=1;
int sum=0;
int sentry=0;
a[0]=1; //首位置1 作为2^0
for(i=0;i<1000;i++){
for(j=0;j<nb;j++){
a[j]=a[j]*2+sentry; //数组每位数乘2,如果大于10,则进位标志sentry=1
if(a[j]>=10){
sentry=1;
if(j==nb-1) t=a[j]; //记录最后一个元素,如果其大于10,则需要在循环结束后进位
a[j]=a[j]%10;
}
else
sentry=0; //如果小于10则不进位
}
sentry=0; //外层循环哨兵需要重新置0,因为考虑最后最后一次循环最高位大于10的情况
if(t>=10){
nb++; //最高位大于10,需增加位数,所以a[j]=1
a[j]=1;
}
t=0;
}
for(i=0;i<nb;i++){
sum+=a[i];
}
printf("\n%d",sum);
return 0;
}