一、题目描述
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-strings
二、运行结果
三、解题思路
模仿加法,进位。
设置一个进位标志( flag,初始化为0),从两个字符串的最后一位(数字最低位)开始相加,两个字符串中的当前位和进位标志相加,得到的结果对10求余,得到结果的当前位,除以10得到当前位的进位结果,直至两个字符串都遍历完。
如果最高为计算完成后还有进位,就在最终结果加上一位1。
四、代码
方案一:
class Solution {
public String addStrings(String num1, String num2) {
int index1 = num1.length() - 1;
int index2 = num2.length() - 1;
StringBuilder ansStr = new StringBuilder();
int flag = 0; //进位标志
while(index1 >= 0 || index2 >=0)
{
int tmp1 = index1 >= 0 ? num1.charAt(index1) - '0' : 0;
int tmp2 = index2 >= 0 ? num2.charAt(index2) - '0' : 0;
int bit = (tmp1 + tmp2 + flag) % 10; //商(当前位结果)
flag = (tmp1 + tmp2 + flag) / 10; //进位值
ansStr.append(bit);
index1--;
index2--;
}
if(flag == 1) //最高位计算后有进位
ansStr.append(1);
return ansStr.reverse().toString();
}
}
方案二:
public static void main(String[] args) {
String num1 = "18";
String num2 = "12";
char[] array1 = num1.toCharArray();
char[] array2 = num2.toCharArray();
int length1 = num1.length() -1;
int length2 = num2.length() -1;
//考虑进位
int carry = 0;
String sum = "";
while (length1 >= 0 || length2 >= 0) {
int temp1 = length1 >= 0 ? array1[length1] - '0' : 0;
int temp2 = length2 >= 0 ? array2[length2] - '0' : 0;
System.out.println("temp1="+temp1 +",temp2="+ "" + temp2);
int sumNumber = temp1 +temp2 + carry;
//如果加起来大于9则进1 否在不进
if (sumNumber > 9) {
carry = 1;
sumNumber = sumNumber % 10;
} else {
carry = 0;
}
sum = sumNumber + sum;
System.out.println(sum);
length1--;
length2--;
}
//最高位如果有进位就进1
if (carry==1) {
sum = "1" +sum;
}
System.out.println("sum="+ sum);
}