给定某数字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
思考:
首先以1 3为例:
是 1+11+111=123只需要个位十位百位相加即可,不需要进位,而实际编程需要考虑进位问题。
以8 3为例
是8+88+888=984
1、首先,看各位是如何得到的,即各位相加再取余,也就是3*8%10得4,进2;
2、其次,看十位是怎么得到的,十位相加2*8加上个位的2(进位得到)再取余,也就是2*8+2%10得8,进1;
3、然后就是百位,百位相加得1*8加上十位的1(进位得到)再取余,也就是1*8+1%10得9
4、此时就可以发现3*8%10也就是可以通过一个for循环里面加上这个语法得到:(N-i)*A,那么我们就得考虑这个进位是怎么得到的?以3*8为例,也就是24得到进位2就要除以十,也就是24/10=2。
所以捋下来,我们就需要用一个sum去存24再取余存进数组,最后再把sum除以10得到进位然后加到接下来的sum里面
即:
for (int i = 0; i < N; i++) {
sum = sum + (N - i) * A;
S[i] = sum % 10;
sum = sum / 10;
}
以上就是这道题的关键,但是还缺少一个点,就是8 3这样循环下来存进数组是三位,但是如果是9 3,9+99+999=1107这样的结果最后是四位,这怎么解决呢,按照上述思路最后存进数组里面的是701,倒着输出来就是107还差前置的一个1;这个1刚好就是最后那个sum=sum/10的sum,所以只要加一个判断,最后的sum!=0,那就先输出即可。