首先错误代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10001];
memset(a,0,sizeof(a));
a[1] = 1;
int n,m,s,t = 0,len = 0;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
for(int j = 1;a[j] != 0;j++){
a[j] *= 2;
}
for(int j = 1;a[j] != 0;j++){
if(a[j] >= 10){
t = a[j] / 10;
a[j] %= 10;
a[j+1] += t;
}
}
}
for(int i = 1;a[i] != 0;i ++){
len ++;
}
for(int i = len;i >= 1;i --){
printf("%d",a[i]);
}
return 0;
}
这里是忽略了“1024”这样数中间有0的情况,所以不能用0来判定整个数的位置
改进:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10001];
memset(a,0,sizeof(a));
a[1] = 1;
int n,t = 0,len = 1;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
for(int j = 1;j <= len;j++){
a[j] *= 2;
}
for(int j = 1;j <= len;j++){
if(a[j] >= 10 && j == len){
len ++;
}
if(a[j] >= 10){
t = a[j] / 10;
a[j] %= 10;
a[j+1] += t;
}
}
}
for(int i = len;i >= 1;i --){
printf("%d",a[i]);
}
return 0;
}
这里引入一个len变量记录数的长度,如果碰到需要进位并且碰到数的边界了就给len+1