7-38 数列求和-加强版 (20分)
程序员文章站
2022-03-13 12:56:41
...
题目描述
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:
输入数字A与非负整数N。
输出格式:
输出其N项数列之和S的值。
输入样例:
1 3
输出样例:
123
解题思路
S的每一位都等于(i * A + t)% 10(注意要考虑进位,其中t是进位),比如说,A=1, N=3时,S的个位就是,十位是,百位是,所以S就是123。由于题目中给的数会超出整形的范围,因此,我们需要用数组来存结果的每一位。
AC代码
#include <iostream>
using namespace std;
int arr[100010];
int main()
{
int a; int n;
cin >> a >> n;
if (n == 0)
{
cout << 0;
}
else
{
int t = 0;
int p = 0;
for (int i = n; i >= 1; --i)
{
int tmp = a * i + t;
if (tmp >= 10)
{
t = tmp / 10;
arr[p++] = tmp % 10;
}
else
{
t = 0;
arr[p++] = tmp;
}
}
if (t != 0)
{
arr[p++] = t;
}
for (int i = p-1; i >= 0; --i)
{
cout << arr[i];
}
}
return 0;
}
上一篇: 拉格朗日插值法 在ACM竞赛中的一些应用
下一篇: 7-9 用天平找小球 (10分)