考虑到 2 N 2^N 2N很容易指数爆炸,超出int的精度,在此采用数组的方式记录其答案,并且数组第一位为其个位上数字,第二位为其十位上数字,以此类推,输出时候倒序输出:
#include#include using namespace std; const int N=3010; int main() { int a[N]={1},b[N]={1},c; int n; cin>>n; for(int i=1;i<=n;i++) for(int j=0;j if (j>0) {b[j] = a[j]; a[j] = (b[j - 1] * 2 / 10 + a[j] * 2)%10; } if (j == 0) { b[0] = a[0]; a[0] = a[0] * 2 % 10; } } reverse(a,a+N); for(int i=0;i if (a[i] != 0) { c = i; break; } } for(int i=c;i 写的有点麻烦,改进了一下可写成以下形式:
#include#include using namespace std; const int N=3010; int main() { int a[N] = {1}; int n; int m = 1; cin>>n; for (int i = 0; i < n; i++) { int t = 0; for (int j = 0; j < m; j++) { t += a[j] * 2; a[j] = t % 10; t /= 10; } if (t) a[m++]=1; } for(int i=m-1;i>=0;i--) cout<



