求 s=a + aa + aaa + aaaa + aa … a 的值。
例如:输入相加的数字为 3,相加的次数为 4,那么就等于 3+33+333+3333 = 3702;
输入相加的数字为 5,相加的次数为 3,那么就等于 5+55+555 = 615。
样例输入:
请输入所要相加的数字:3
请输入相加的次数:4
样例输出:
结果:3702
方法1
通过观察可以发现后一位数字就是前一位nextnum*10+nextnum得到的,那我们就可以直接写代码了
num = int(input("请输入所要相加的数字:"))
n = int(input("请输入相加的次数:"))
#定义一个变量用来存储当前数字:(上一个数字)*10+上一个数字
backnum = 0
#定义一个变量用来存储相加的和
result = 0
#创建一个循环,循环次数为需要相加的次数
for i in range(n):
#每一次循环都会利用(上一个数字)*10+上一个数字公式,算出当前数字
backnum = backnum*10+num
#把当前数字累加到结果中
result+=backnum
#输出结果
print(result)
我们来看一下这个程序时如何执行的:
直接进入到循环中,以需要累加的数字为3,累加次数为4为例:
第一次循环:
backnum*10+num,backnum当前值为0,num值为3,0*10+3,将结果3赋值给左边的backnum,此时backnum值为3,result结果为0+3
第二次循环:
backnum*10+num,backnum当前值为3,num值为3,3*10+3,将结果33赋值给左边的backnum,此时backnum的值为33,result结果为3+33
第三次循环:
backnum*10+num,backnum当前值为33,num值为3,33*10+3,将结果333赋值给左边的backnum,此时backnum的值为333,result结果为36+333
第四次循环:
backnum*10+num,backnum当前值为333,num值为3,333*10+3,将结果3333赋值给左边的backnum,此时backnum的值为3333,result结果为369+3333
最后结果: 3702
方法二
第二种方法我运用了递归的方式,可能理解起来比较困难,我会将过程写的仔细一点,方便大家理解:
通过阅读题目我们可以发现,相加的次数是和相加的数存在着一种联系
结果 = n*1+n*11+n*111…n*11…1
而1出现的次数也相加的次数是有联系的,如果需要相加的次数是4次,那最后一个数n*1111,1111我们可以通过:10**4 + 10**3 + 10**2 + 10**1d得出,也可以导出公式为:10**n+10**(n-1)…+10**1,这样我们就可以先用递归直接把所需要乘多少个1求出来了
def one(n):
#判断如果n为1时,直接返回
if n == 1:
return 1
else:
return 10**(n-1) + one(n-1)
#result = num * 1 + num * 11 + num * 111
#>>> result = num * one(n) + num * one(n-1) ... + num
def count(second,num):
if second == 1:
return num
else:
return one(second)*num+count(second-1,num)
num = int(input("请输入所要相加的数字:"))
n = int(input("请输入相加的次数:"))
print(count(n,num))
方法三
方法三我用了比较取巧的方式,字符串的特性中相乘就是赋值字符串,aaaa>aaa>aa>a,我们就可以利用for循环来完成我们的目的
#因为我们需要用到字符串的特性所以就不需要将接收值转换为数字了
num = input("请输入所要相加的数字:")
n = int(input("请输入相加的次数:"))
#创建一个变量用来接收累加的值
result = 0
#循环的次数就是需要相加的次数
for j in range(n):
#将字符串赋值的次数为n,n-1,n-2,n-3,所以直接将n = n-j,此处j是循环中的
#变量会随着循环次数的增加而加1,将复制好的字符串转换为int类型进行累加
result += int(num*(n-j))
print(result)