用数组计算2的N次方。N <= 10000
用数组模拟竖式乘法(数字倒着存在数组中,即512在数组中为2,1,5),初始A[n]=1, size记录位数,从第一位开始乘以2,结果取个位数填入自己的位置,取十位数为t,用于进位。乘N轮
A[n] | t (用于进位) |
A[0]=A[0] * 2 % 10; | t=(A[0] * 2) / 10 |
A[1]=(A[1] * 2 + t) % 10; | t=(A[1] * 2 + t)/ 10 |
... | |
A[n-1]=(A[1] * 2 + t) % 10; | t=(A[n-1] * 2 + t)/ 10 |
A[n]=t; |
以此类推
注:初始t=0, A[0]=(A[0] * 2 + t) % 10;
#include <iostream>
#include <cmath>
using namespace std;
//用数组模拟竖式乘法
const int N = 3010;
int main() {
int a[N] = {1}, size = 1;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int t = 0;
for (int j = 0; j < size; j++) {
int m = a[j];
a[j] = (m * 2 + t) % 10;
t = (m * 2 + t) / 10;
}
if (t > 0) a[size++] = t; //一轮乘法结束,判断最高位是否需要进一
}
//输出(倒着输出)
cout << "计算结果:";
for (int i = size - 1; i >= 0; i--) {
cout << a[i];
}
cout << endl;
cout << "pow函数结果:" << (int) pow(2, n);
}