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;

}