C++语法基础--高精度运算
题目如下:
计算2的N次方。N<=10000
思路:看到N的范围如此大,那2^n 所产生的一串数字至少有log(2^n)位,极端情况下会产生溢出。所以我们不能直接使用暴力循环乘,于是引出高精度算法。该算法的核心是使用数组去拆解每一步,模拟手算的过程。
算法细节:
#include
using namespace std;
const int N=3000;
int main()
{
int a[N]={1};
int n;
cin>>n;
int size=1;
for(int i=0; i {
int t=0;
for(int j=0; j {
t += a[j]*2; //最后一位数乘以二,初始数为1
a[j] = t%10; //取上述结果的尾位为当前位的值
cout<endl;
t /= 10; //把第一步的结果向前的进位截取出来
}
if(t) a[size++] = 1; //若一次运算后产生了进位,则扩展到下一位并置下一位初始值为1
}
for(int i=size-1; i>=0; i--) cout< cout<<endl;
}