欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的个位就是31=33*1=3,十位是21=22*1=2,百位是11=11*1=1,所以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;
}

7-38 数列求和-加强版 (20分)

相关标签: PTA