这是一道喜闻乐见的高精度题
首先错误代码
#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
标签:10,10001,int,1612,len,++,计算,次方 From: https://www.cnblogs.com/Qwehhh-maimaiDX/p/17892303.html