在计算2的n次幂的时候,咱们能够采用pow这个函数,可是当数据太大的时候显然int double 等这些数据类型并不能保存下来,就会出现问题,这个时候能够采起数组存储的方式。算法
1.使用pow函数。数组
pow(x,y)为计算x的y次幂。函数
如:pow(2,3)为计算2的3次幂。code
2.使用数组存储。索引
核心算法是:咱们把数组的每个元素看做数字的每一位。如:a[3]={1,2,3},咱们就看做123这个数字。string
因此咱们须要让这个数组里面全部的数都乘以2,而后会出现进位的问题,咱们就让a[j]/10求出来这一位超过10的部分,给加到他的下一位上。如a[j]=13,a[j+1]=2,这时a[j]>9的,咱们知道数字的每一位(除首位外)都是0~9的,这时就须要进位,让a[j]变成3,进一位让a[j+1]变成3,咱们a[j]%10取出来1,加到a[j+1]上,这样a[j+1]就变成了3,而后a[j]%10使a[j]变成3,这样就能完成进位工做了。io
输出的时候,由于咱们并不知道咱们求出来的数字究竟有多少位,而且输出也须要从高位进行输出,因此须要处理前面几位是0的存在,注意到当乘法结束的时候j是数组最大的索引,因此咱们这个时候就使用j这个变量了。一直处理到数组里面的元素再也不是0,咱们就开始输出。for循环
固然这个代码只能实现长度不超过10000的长度,当须要超过这个,能够考虑加大数组长度,并相应改变for循环的范围。class
#include <stdio.h> #include <string.h> int a[10000]; int main() { int n,i,j; scanf("%d",&n); memset(a,0,sizeof(a)); a[0]=1; for(i = 0;i < n;i++) { for(j = 0;j < 10000;j++) a[j] *= 2; for(j = 0;j < 9999;j++) { a[j+1] += a[j] / 10; a[j] %= 10; } } while(!a[j])j--; for(;j >= 0;j--) printf("%d",a[j]); return 0; }