7-38 数列求和-加强版

给定某数字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为例:

111111=123只需要个位十位百位相加即可,不需要进位,而实际编程需要考虑进位问题。

8 3为例

8+88+888=984

1、首先,看各位是如何得到的,即各位相加再取余,也就是3*8%104,进2

2、其次,看十位是怎么得到的,十位相加2*8加上个位的2(进位得到)再取余,也就是2*8+2%108,进1

3、然后就是百位,百位相加得1*8加上十位的1(进位得到)再取余,也就是1*8+1%109

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 39+99+999=1107这样的结果最后是四位,这怎么解决呢,按照上述思路最后存进数组里面的是701,倒着输出来就是107还差前置的一个1;这个1刚好就是最后那个sum=sum/10sum,所以只要加一个判断,最后的sum=0,那就先输出即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值