题目
请实现程序计算:2^N的值,其中512<=N<=1024。
思路
这个其实就是大数值的计算,在大一的上计算机导论的时候,老师就叫我们可以尝试用数组实现大数值的乘法,所以这道题同样时采用数组实现,需要注意的问题就是进位。
代码实现
#include <iostream>
#include <cstring>
using namespace std;
#define size 3500 ///至少可以计算到2^10000
void compute(int n)
{
int res[size]; ///默认初始化为0
int true_size = n * 0.301 + 2; ///实际最大的位数
int i = 0;
int j = 0;
for(i = true_size; i < size; i++) ///将存放结果的数组初始化为0
res[i] = 0;
res[size - 1] = 1; ///用数组存放计算得到的值,由于我们知道两个是十以内的数据相乘,肯定时小于100的,所以我们可以边算边进位
for(i = 0;i < n; i++) ///开始计算
{
for(j = size - 1; j >= true_size;j--) ///先把每个位都乘以2
{
res[j] <<= 1; ///*2
}
for(j = size -1; j >= true_size; j--) ///处理进位
{
if(res[j] >= 10)
{
res[j - 1] += res[j]/10;
res[j] = res[j] % 10;
}
}
}
for(i = true_size;i < size; i++) ///打印结果
{
if(res[i] != 0)
break;
}
for(;i < size;i++)
{
cout << res[i];
}
cout<<endl;
}
int main()
{
int n;
cin>>n;
compute(n);
return 0;
}
思考
其实这个程序有很大的扩展性,首先,你可以通过修改size的大小来计算更大次幂值。另外,稍微修改一下代码,还可以计算其他底数的次幂值。