我正在研究这个看似简单的问题,我需要在数字的每个数字上加一个。示例:number = 1234;输出= 2345
这很简单,但当9是其中一个数字时,那么根据加法则,9将被0替换,1将被添加到左边的数字(9 + 1 = 10,因此,地方值= 0&结转= 1) 示例:number = 1239;输出= 2350
number = 1234
s = str(number)
l = []
for num in s:
num = int(num)
num += 1
if num > 9:
num = 0
l.append(num)
else:
l.append(num)
print int(''.join(str(v) for v in l))
有人可以向我解释一下,我应该使用什么逻辑?我可以看到模块化算术的一些东西,但不确定如何实现它。 谢谢:))
答案 0 :(得分:7)
一种简单的方法如下
考虑一个数字N = a n a n-1 a n-2 ... a 0
然后F(N)= N +(10 n-1 +10 n-2 .. 10 0 )= N + int(' 1' XN) = N +(10 n -1)/(10 - 1)= N +(10 n -1)/ 9
>>> def foo(N):
return N + int('1'*len(str(N)))
>>> foo(1234)
2345
>>> foo(1239)
2350
编辑:利用功率公式
简化一点>>> def foo(N):
return N + ((10**len(str(N)) - 1) // 9)
答案 1 :(得分:2)
纯数学:
num = num + (10**int(math.ceil(math.log10(num)))-1)//9
答案 2 :(得分:2)
您可以轻松修改代码,以反向顺序处理数字并保持进位状态。您正在寻找的“模块化算术”通常使用%
运算符实现:
number = 1234
s = str(1234)
l = []
carry = 0
for num in reversed(s):
num = int(num) + carry
num += 1
carry = num / 10
l.append(num % 10)
print int(''.join(str(v) for v in reversed(l)))