説明
ロング二つの文字列は、結果の文字列形式を追加されます。あなたはBigIntegerのを使用することはできません。
思考
- 難点
これは、Javaでこのような大きな数を表していない可能性があるため、整数の方法の長い文字列に長い整数に直接採取することができない(BigIntegerを持つ場合を除き、しかし言うために使用することができません)
- 方法1
2つの文字列が、後ろから前に、少しずつ追加され、RESに追加結果の一桁はRES反転を返し、キャリー・セーブ。
- 改良された方法2
二つの文字列に文字列は、同じ長さで、あなたの後、合計でも
コード
- ジャワ
* 方法1 原始*
public String addStrings(String num1, String num2) {
int i=num1.length()-1, j=num2.length()-1,jinwei=0;
StringBuilder sb = new StringBuilder("");
while (i>=0 && j>=0) {
int k = i>=0? num1.charAt(i--)-'0':0;
int kk = j>=0? num2.charAt(j--)-'0':0;
int zong = k+kk+jinwei;
jinwei = zong/10;
sb.append(zong%10);
}
if (i>=0) {
while (i>=0) {
int k = num1.charAt(i)-'0';
int zong = k+jinwei;
jinwei=zong/10;
sb.append(zong%10);
i--;
}
}
if (j>=0) {
while (j>=0) {
int kk = num2.charAt(j)-'0';
int zong = kk+jinwei;
jinwei = zong/10;
sb.append(zong%10);
j--;
}
}
if (jinwei>0)
sb.append(jinwei);
return sb.reverse().toString();
}
* 方法1 进阶 *
public String addStrings(String num1, String num2) {
int i=num1.length()-1, j=num2.length()-1,jinwei=0;
StringBuilder sb = new StringBuilder("");
while (i>=0 || j>=0) {
int k = i>=0? num1.charAt(i--)-'0':0;
int kk = j>=0? num2.charAt(j--)-'0':0;
int zong = k+kk+jinwei;
jinwei = zong/10;
sb.append(zong%10);
}
if (jinwei>0)
sb.append(jinwei);
return sb.reverse().toString();
}
* 方法2 *
public String addStrings(String num1, String num2) {
int diff = Math.abs(num1.length()-num2.length());
if (num1.length()<num2.length())
while (diff-->0)
num1="0"+num1;
else
while (diff-->0)
num2="0"+num2;
int n=num1.length()-1, jinwei=0;
StringBuilder sb = new StringBuilder("");
while (n>=0)
{
int zong = jinwei+num1.charAt(n)+num2.charAt(n)-'0'-'0';
jinwei = zong/10;
sb.append(zong%10);
n--;
}
if (jinwei>0)
sb.append(jinwei);
return sb.reverse().toString();
}
- python3
* 方法1 进阶*
def addStrings(self, num1: str, num2: str) -> str:
i=len(num1)-1
j=len(num2)-1
jinwei=0
res=''
while(i>=0 or j>=0) :
k = int(num1[i]) if i>=0 else 0
kk = int(num2[j]) if j>=0 else 0
zong = k+kk+jinwei
jinwei=zong//10
res+=str(zong-10*jinwei)
i-=1
j-=1
if jinwei>0:
res+=str(jinwei)
return res[::-1]
* 方法2 *
def addStrings(self, num1: str, num2: str) -> str:
diff = abs(len(num1)-len(num2))
if len(num1)<len(num2):
num1 = '0' * diff + num1
else:
num2 = '0'*diff + num2
n=len(num1)-1
jinwei=0
res=''
while n>=0:
zong = int(num1[n])+int(num2[n])+jinwei
jinwei = zong//10
res+=str(zong%10)
n-=1
if jinwei>0:
res +=str(jinwei)
return res[::-1]