(C语言程序题) 求累加和。 输入两个正整数n和a,求累加和 S=a + aa + aaa + …+aa...a(n个a)之和。 Sample Input: 5 3 Sample Output: 37035
时间: 2023-10-24 10:09:25 浏览: 67
分析:
题目中的累加和可以表示为:
$S=a + aa + aaa + … + aa...a(n个a)$
$=a(1+11+111+…+111…1(n个1))$
$=a\sum_{i=1}^{n}(10^{n-i}\times\sum_{j=1}^{i}10^{i-j})$
$=a\sum_{i=1}^{n}\sum_{j=1}^{i}10^{n-j}\times10^{i-j}$
$=a\sum_{i=1}^{n}\sum_{j=1}^{i}10^{n-2j+2i-2}$
$=a\sum_{i=1}^{n}\sum_{j=1}^{i}10^{n-2(j-i)+2i-2}$
$=a\sum_{i=1}^{n}\sum_{k=0}^{i-1}10^{n-2k+2i-2}$
其中,$k=j-i$,$k$的取值范围为$[0,i-1]$。
由于计算过程中需要频繁求10的幂次,我们可以先预处理出一个数组$pow10$,其中$pow10[i]$表示$10^i$。
然后就可以按照上述公式进行计算了。
代码:
相关问题
(C语言程序题) 求累加和。 输入两个正整数n和a,求累加和 S=a + aa + aaa + …+aa...a(n个a)之和。 Sample Input: 5 3 Sample Output: 37035
```c
#include <stdio.h>
int main()
{
int n, a;
scanf("%d%d", &n, &a);
long long prev = 0, sum = a;
for (int i = 2; i <= n; i++)
{
prev = prev * 10 + a;
sum += prev * i;
}
printf("%lld\n", sum);
return 0;
}
```
请用C语言实现:输入两个正整数n和a,求累加和 S=a + aa + aaa + …+aa...a(n个a)之和。
```c
#include <stdio.h>
int main() {
int n, a;
scanf("%d %d", &n, &a);
int sum = 0, tmp = a;
for (int i = 0; i < n; i++) {
sum += tmp;
tmp = tmp * 10 + a;
}
printf("%d\n", sum);
return 0;
}
```
阅读全文