题目描述:
解题思路:
这道题是easy水平的,考查模拟两数相加,一开始自己写的很长,还测试了好久才通过,还是逻辑没有处理好。
我一开始的思路是两个字符串先让字符串少的补齐和多的一样的0,然后在相加最后反转就行了,但这样麻烦。
可以直接在相加的时候,就处理,如果两个指针不符合条件,就把相加的数,赋值0。
这道题写完后,要多注意测试一下,比如//9 1;99 9; 1234 78;看是不是没有问题了在提交。
参考代码:
//菜鸡写法
public String addStrings(String num1, String num2) {
//补全字符串//1234 78->1234 0078
String lo="";
int c=Math.abs(num1.length()-num2.length());
for (int k = 0; k < c; k++) {
lo+="0";
}
char[] n1=null;
char[] n2=null;
if(num1.length()>=num2.length())
{
num2=lo+num2;
n1=num1.toCharArray();
n2=num2.toCharArray();
}
else
{
num1=lo+num1;
n1=num2.toCharArray();
n2=num1.toCharArray();
}
int sum=0;
int i=n1.length-1;
int j=n1.length-1;
int temp=0;
String s="";
for (int k = n1.length-1; k >= 0; k--)
{
int x=(n1[i]+n2[j]+temp-'0'-'0')%10;
if(n1[i]+n2[j]-'0'-'0'+temp>9)
{
temp=1;
}else
{
temp=0;
}
s+=String.valueOf(x);
i--;
j--;
}
//9 1 这种情况,如果temp不等于0,还需要加上temp,否则正确答案为10,可能会输出0
if(temp!=0)
{
s+=temp;
}
StringBuffer sb=new StringBuffer(s);
return sb.reverse().toString();
}
//大佬思路
public String addStrings2(String num1, String num2) {
StringBuilder builder=new StringBuilder();
int i=num1.length()-1,j=num2.length()-1;
int add=0;
while(i>=0||j>=0||add!=0){
//超出范围用0代替
int x=i>=0 ? num1.charAt(i)-'0': 0;
int y=j>=0 ? num2.charAt(j)-'0': 0;
int result=(x+y+add);
add=result/10;//进位
builder.append(result%10);
i--;
j--;
}
return builder.reverse().toString();
}