作业帮 > 综合 > 作业

C++计算高次幂谁可以给一个简单的程序,计算a的b次方.a可以在0~100;b在0~1000;如果上限大的话,都会超过l

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 08:39:54
C++计算高次幂
谁可以给一个简单的程序,计算a的b次方.a可以在0~100;b在0~1000;如果上限大的话,都会超过long long 类型,是不是要用数组进行运算.
麻烦大神给个简单点的程序计算这个,适当加一点注释吧,我是新手
#include<iostream>
using namespace std;

#define MAXN 10001 //a可以在0~100;b在0~1000,所以a^b最大为10^10000,不会超过10001位数
void modRes(int res[], int n);

int main()
{
    int a,b,i;
    int res[MAXN]={0};//存放结果的数组,可以看成一个大数
    cout<<"input a and b:";
    cin>>a>>b;
    res[0]=a;
    for(i=1;i<b;++i) {
        for(int j=0;j<MAXN-1;++j) {
            res[j] *= a;//大数的每一位乘以a
        }
        modRes(res, MAXN);//进位
    }

    for(i=MAXN-1;i>=0;--i) {//高位多余的0不需要输出
        if(res[i] != 0) break;
    }
    cout<<a<<"^"<<b<<"=";
    for(;i>=0;--i) {//从第一个不是0的高位开始输出
        cout<<res[i];
    }
    cout<<endl;

    return 0;
}

void modRes(int res[], int n) {//从低位开始向高位进位
    for(int i=0;i<n-1;++i) {
        res[i+1] += (res[i]/10);
        res[i] %=10;
    }
}
输出结果为:
input a and b:23 6
23^6=148035889
Press any key to continue