您需要按以下顺序找到数字的总和: 2, 22, 222, 2222, ..., 2(n), - 其中,n 是最后一个数字的位数
例如,n = 5,最后一个数字是 22222,序列中数字的总和是 24690。
n = 5 # кол-во разрядов
last_num = 0 # итоговое число
i = 1 # счетчик разрядов
sum = 0 # 2 + 22 + 222 + 2222 + 22222 => 24690
while n > 0:
last_num += 2 * i
i *= 10
n -= 1
print(last_num)
while last_num != 0:
sum += last_num // 10
last_num //= 10
print(sum)
我知道代码是一条曲线,因为我刚开始学习 Python。请告诉我如何找到数字的总和,因为条件 sum += last_num // 10 “切断”了前两个,因此,总和是从数字 2222 + 222 + 22 + 2 = 2468 中获得的, 而不是 22222 + 2222 + 222 + 22 + 2 = 24690。
主要错误是过于复杂。你的想法是正确的,但删除两行。Python 要求简洁明了,从考虑最简洁明了的选项开始你的决定。但清晰比简洁更重要。
您收到错误是因为您将最后一位数字截断两次(
sum += last_num // 10和last_num //= 10)。删除以下内容之一:顺便说一句,代码很正常。只有
sumpython中的名称是为函数保留的,所以不应该用作变量名。在这种情况下,您可以在名称末尾添加“_”。
你不能切断,但积累:
term- 术语:0、2、22、222、...、2(n);sum_- 累积总和:2 + 22 + 222 + ...;n- 迭代计数器。没有比这更容易的了:
稍加巧思,术语可以直接阅读。少了一个变量,但更难理解发生了什么:
还有一点独创性:答案有一个封闭的公式。一行很长的解释为什么会这样:
一行是为了好玩,但这里使用数字的字符串表示是为了方便:
我们只需将数字“乘”所需的次数(为此,它必须是一个字符串),将其转换为一个数字,所有这些都在一个循环中,然后求和。
另外的选择:
或者像这样: