題目描述:

解題思路:
這道題是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();
}