【问题分析】
该问题需要解决的是高精度计算问题,因为2的N次方可能会超过longlong类型所能容纳的最大值而造成溢出错误,所以必须使用数组存放幂的值,需要采用高精度计算方法处理。
假设使用一个数组a[101]存放幂的值,a[0]存放幂的位数,然后每一位和2相乘(注意处理进位,注意处理幂的位数增加),循环N次,最终输出数组a即可。
【程序代码】#include
using namespace std;
int a[101];
void mi(int n)
{
int s=1,k=0;
a[1]=1;
a[0]=1;
for(int i=1;i<=n;i++) {
k=0;
for(int j=1;j<=a[0];j++) {
a[j]=a[j]*2+k;//按位乘以2再加上上次相乘的进位
k=a[j]/10; //进位
a[j]=a[j]%10; //取余数为该位的值}
if(k!=0)
{
a[a[0]+1]+=k; //表示最高位仍有进位,需要在最高位的上位再加1
a[0]++; //由于最高位的上一位加1,所以幂的位数需要增加1
} }
}
int main()
{
int n;
memset(a,0,sizeof(a));
cout< scanf("%d",&n);
mi(n);
for(int i=a[0];i>0;i--) cout<//输出幂的值
}
【运行结果】