描述
用户输入一个小于10的正整数,求1 + 12 + 123 + 1234 + …… 的前n项的和,当输入大于或等于10时,输出“data error!”
输入格式
一个小于10的正整数
输出格式
数列的前 n 项和或“data error!”
这是一个前n项累加的问题,一个循环就可以解决,难点是通项的构建,有这样几种方法:
后一项为前一项的10倍与下一个数字的加和:
010+1,110+2,(110+2)10+3,((110+2)10+3)*10+4….
tmp = 0
for i in range(1,10):
tmp = tmp * 10 + i
print(tmp,end=' ')
# 1 12 123 1234 12345 123456 1234567 12345678 123456789 整数
n = int(input())
if n >= 10:
print('data error!')
else:
sum = 0
tmp = 0
for i in range(1,n + 1):
tmp = tmp * 10 + i
sum = sum +tmp
print(sum)
- 构造一个字符串 num = ‘123456789’ 通过对其切片获得各项
num = '123456789'
for x in range(1,10):
print(num[:x],end=' ')
# 1 12 123 1234 12345 123456 1234567 12345678 123456789 字符串
n = int(input())
if n >= 10:
print('data error!')
else:
sum = 0
num = '123456789'
for i in range(1,n + 1):
sum = sum +int(num[:i])
print(sum)
- 用列表推导式产生一个包含各项数的列表
num = '123456789'
ls = [int(num[:x]) for x in range(1,10) ]
print(ls)
# [1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789] 整数
n=int(input())
if n >= 10:
print('data error!')
else:
num = '123456789'
print(sum([int(num[:x]) for x in range(1,n + 1) ]))
列表推导式与条件表达式共用
n=int(input())
print('data error!') if n >= 10 else print(sum([int('123456789'[:x]) for x in range(1,n + 1) ]))
n = int(input())
print(sum([ int(''.join(map(str,range(1,i+1)))) for i in range(1,n + 1)])) if n < 10 else print('data error!')