求2^N大数

来源:互联网 发布:淘宝抠图兼职怎么找 编辑:程序博客网 时间:2024/05/18 20:46
求2^N的值。
#include <iostream>#include <vector>#include <string>using namespace std;//大数相乘/***num1 乘数1*num2 乘数2*return 结果字符串*/string BigMutiple(string num1, string num2){    string res="";    //两个数的位数    int m = num1.size(), n = num2.size();    //一个i位数乘以一个j位数,结果至少是i+j-1位数    vector<long long> tmp(m + n - 1);    //每一位进行笛卡尔乘法    for (int i = 0; i < m; i++){         int a = num1[i] - '0';        for (int j = 0; j < n; j++){            int b = num2[j] - '0';            tmp[i + j] += a*b;        }    }    //进行进位处理,注意左侧是大右侧是小    int carry = 0;    for (int i = tmp.size() - 1; i >= 0; i--){        int t = tmp[i] + carry;        tmp[i] = t % 10;        carry = t / 10;    }    //若遍历完仍然有进位    while (carry != 0){        int t = carry % 10;        carry /= 10;        tmp.insert(tmp.begin(), t);    }    //将结果存入到返回值中    for (auto a : tmp){        res = res + to_string(a);    }    if(res.size()>0&&res[0]=='0')return "0";    return res;}//测试函数int main(){    int N=0;    string str="2";    cin>>N;    for(int i=0;i<N-1;++i)    {    str=BigMutiple(str,"2");}        cout << str << endl;    return 0;}

原创粉丝点击