描述
两个字符串形式的长整数相加,返回字符串形式的结果。不能用BigInteger 。
思路
- 困难点
不能采取直接将字符串形式的长整数变为长整数的方式,因为在java中可能无法表示这么大的数(除非用BigInteger ,但是说了不能用)
- 方法1
两个字符串,从后向前,逐位相加,保留进位,将得到的个位数添加到res中,返回res的反转。
- 改进的方法2
可将两个字符串变成同样长度的字符串,再进行诸位相加
代码
- java
* 方法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]