7-38 數列求和-加強版 (20分)

題目描述

給定某數字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;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章