c++设计函数计算a的b次方所有位数之和

设计一个函数,计算a的b次方所有位的数字之和,其中0<a<10,1<b<10000

img

大概思路就是做大数乘法(题目给的最多可以是9^9999肯定超过了long long)
大数乘法用数组来储存每个位的数据,模拟乘法进位过程,最后遍历一遍数组相加每个位的值输出
然后代码在下面,希望能帮助到你

#include <bits/stdc++.h>
using namespace std;

#define MAXNUMBER 10000

long long getpowerdsum(int a, int b)
{
    long long sum = 0;
    int next = 0;
    int add = 0;
    int num[MAXNUMBER] = {0};
    num[MAXNUMBER-1] = a;
    

    for(int i = 1; i < b; ++i)
    {
        for(int j = MAXNUMBER-1; j > 0; --j)
        {
            num[j] *= a;
            if(j == next)
            {
                num[j] += add;
                next = 0;
                add = 0;
            }
            if(num[j] >= 10)
            {
                next = j - 1;
                add = num[j] / 10;
                num[j] %= 10;
            }
        }
        /*  如果要输出查看计算过程就取消这里的注释
        for(int k = 1; k < MAXNUMBER; ++k)
        {
            cout << num[k];
        }
        cout << endl;
        */
    }

    for(int i = MAXNUMBER-1; i > 0; --i)
    {
        sum += num[i];
    }

    return sum;
}

int main()
{
    cout << getpowerdsum(2,10) << endl;
    cout << getpowerdsum(9,10) << endl;
    cout << getpowerdsum(9,9999) << endl;
    return 0;
}

33

我来说说思路:
b个a相乘。得到一个数。
遍历之,相加。