给定某数字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的值。
题目分析:
本来想利用python整数没有范围限制的特点来偷个懒,但是超时了。研究一下题目的特点,可以发现相加的每项各个位上的数字都是相同的,可以用数字乘以项数(按位递减)来简化计算,把计算的结果的个位放到当前位上,再除以10作为进位给后面的更高位的计算使用。计算完成后再逆向输出结果就可以了。
#include <stdio.h>
#define MAXN 100064
int main(int argc, const char *argv[])
{
int A, N, temp=0, i;
int S[MAXN] = {0};
if ( scanf("%d %d", &A, &N)==EOF ) printf("error\n");
if ( N>=MAXN ) printf("input is out of range\n");
for ( i=0; i<N; ++i ) {
temp += A * (N-i);
S[i] = temp % 10;
temp /= 10;
}
while ( temp ) {
S[i++] = temp % 10;
temp /= 10;
}
while ( i-- ) {
printf("%d", S[i]);
}
if ( N==0 ) putchar('0');
return 0;
}