2つの数字があるとしましょう。
番号 1:
1646
2番:
2089
キャリーオンなしで左から右に追加すると、最大で 3625 になります。Python でこれを行うにはどうすればよいでしょうか。よくわかりませんが、15である9 + 6を追加する必要がありますが、8 + 4を追加するときに1を続行しないようにする必要があります。Pythonでこのように追加する方法はありますか? そして、私が探している最終結果は
3625
残りの数は引き継がれないので
次のコードはあなたが望むものを示していますが、これはヒントとして考えてください。変数名と例外処理の欠如は、実際のコードを危険にさらします。
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)
最初に数値を文字列に変換して、数字を反復できるようにします。
>>> n1 = str(1646)
>>> n2 = str(2089)
次に、対応する数字を追加して%10
から、最後の数字を取得します。0 ~ 9の 2 つの整数を加算した結果のすべての数値は<= 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")
異なる長さの数を加算するために使用します。
文字列だけで整数の数字にインデックスを付ける方法がわからないため、これはちょっと醜いですが、機能します。
2 つの文字列が常に同じサイズの場合:
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)
2 つの文字列が常に同じサイズではない場合は、どちらが大きいか (長さ方向) を見つけます。最大の長さが X で、その他の長さが Y であるとします。ここで、X > Y です。より大きな文字列の最初の XY インデックスを結果に追加し、残りの数字で上記を繰り返します。
数値は長さが異なる可能性があるため、両方を文字列に変換し、逆順 (インデックス作成を容易にする)、拡張スライスを使用して逆順 ([::-1]、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)