假设我有两个号码,
第1名:
1646
2号:
2089
你看到从左到右添加它们没有进位加起来3625如何在python中执行此操作?我不确定但是我需要它添加9 + 6这是15但是当它添加8 + 4时没有继续1是否有任何方式在python中添加这样的?我正在寻找的最终结果是
3625
因为它没有剩余的数字
答案 0 :(得分:7)
这将适用于不同长度的N个不同的整数:
from itertools import izip_longest
nums = [1646,
2089,
345]
revs = [str(n)[-1::-1] for n in nums] # nums as reversed strings
izl = izip_longest(*revs, fillvalue = '0') # zip the digits together
xsum = lambda ds: str(sum(map(int, ds)))[-1] # digits -> last digit of their sum
rres = ''.join(xsum(ds) for ds in izl) # result, but as reversed string
res = int(rres[-1::-1]) # result: 3960
类似的想法,但使用map
而不是izip_longest
。我更喜欢这个。
revs = [str(n)[-1::-1] for n in nums] # nums as reversed strings
dsum = lambda *ds: sum(int(d or 0) for d in ds) # str-digits -> their sum
sums = map(dsum, *revs)[-1::-1] # digit sums, in order
ones = [str(s % 10) for s in sums] # last digits of the sums
res = int(''.join(ones)) # result: 3960
答案 1 :(得分:4)
因为我喜欢以开放式的“更有效”的要求获得诗意许可:
In [49]: a,b = 1646,2089
In [50]: ''.join(str(sum(map(int,x)))[-1] for x in zip(str(a),str(b)))
Out[50]: '3625'
答案 2 :(得分:3)
以下代码演示了您的需求,但请将此视为提示。 var名称和缺少异常处理将危及您的真实代码。
import operator
n1 = 1646
n2 = 2089
l1 = [int(x) for x in str(n1)]
l2 = [int(x) for x in str(n2)]
res1 = map(operator.add, l1, l2)
res2 = [str(x)[-1] for x in res1]
num = "".join(res2)
print int(num)
答案 3 :(得分:3)
即使两个数字中的位数不同,这也会有效。
num1, num2, i, temp = 1646, 2089, 10, 0
total = num1 + num2
while num1 or num2:
if (num1 % 10) + (num2 % 10) > 9: temp += i
num1, num2, i = num1 // 10, num2 // 10, i * 10
print total - temp
<强>输出强>
3625
答案 4 :(得分:1)
这有点难看,因为我不知道如何索引整数中的数字,只有一个字符串,但它有效。
如果两个字符串的大小始终相同:
A = str(1646)
B = str(2089)
result = ""
for i in range(0,len(A)):
result += str((int(A[i]) + int(B[i]))%10)
result = int(result)
如果两个字符串的大小不一样,请找出哪个字符串更大(长度方面)。假设最大的长度是X而其他长度是Y,其中X> Y.将较大字符串的第一个X-Y索引附加到结果上,然后用剩余的数字重复上面的内容。
答案 5 :(得分:1)
数字的长度可能不同,因此将两者都转换为字符串,反向顺序(使索引更容易),使用扩展切片反向([:: - 1],Reverse a string in Python),反向转换,
result=""
A=str(1646)[::-1]
B=str(2089)[::-1]
for ndx in range(0,max(len(A),len(B)):
result += str(int(A[ndx])+int(B[ndx]))
resut = int(result[::-1])
你可以很容易地携带,并处理不等长度的字符串(明确地),
#!/bin/env python
a=1646
b=20893
A=str(a)[::-1]
B=str(b)[::-1]
lenA = len(A)
lenB = len(B)
length = max(lenA,lenB)
print "length: "+str(length)
#string add,no carry
total=""
for ndx in range(0,length):
digit = 0
if(ndx<lenA):
digit += int(A[ndx])
if(ndx<lenB):
digit += int(B[ndx])
digit = digit%10
#print "digit: "+str(digit)+", carry: "+str(carry)
total += str(digit)
print "a: " +str(a)+"+b: " +str(b)
result = total[::-1]
resut = int(result)
print "result: " +str(result)
#string add,with carry
total=""
carry=0
for ndx in range(0,length):
digit = carry
if(ndx<lenA):
digit += int(A[ndx])
if(ndx<lenB):
digit += int(B[ndx])
carry = digit/10
digit = digit%10
#print "digit: "+str(digit)+", carry: "+str(carry)
total += str(digit)
if(carry>0):
total += str(carry)
#print "digit: "+str(digit)+", carry: "+str(carry)
print "a: " +str(a)+"+b: " +str(b)
result = total[::-1]
resut = int(result)
print "result: " +str(result)
答案 6 :(得分:1)
首先将数字转换为字符串,以便我们可以迭代数字:
>>> n1 = str(1646)
>>> n2 = str(2089)
然后我们可以添加相应的数字,然后执行%10
以获取最后一位数字。添加两个整数 0-9 所产生的所有数字都将是&lt; = 18 ,因此%10
将始终返回最后一位数。
>>> [(int(a)+int(b))%10 for a,b in zip(n1,n2)]
[3, 6, 2, 5]
然后我们将每个int转换为字符串,连接数字并转换回int:
>>> int(''.join(map(str,((int(a)+int(b))%10 for a,b in zip(n1,n2)))))
3625
或者(随时转换数字):
>>> int(''.join(str((int(a)+int(b))%10) for a,b in zip(n1,n2)))
3625
使用izip_longest(...,fillvalue="0")
添加不同长度的数字。