设计一个函数,计算a的b次方所有位的数字之和,其中0<a<10,1<b<10000
大概思路就是做大数乘法(题目给的最多可以是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相乘。得到一个数。
遍历之,相加。