Java 使用字符串添加两个大长度数字
我似乎不明白这个用于添加两个字符串的方法有什么错。当存储每个添加的数字并最终显示时,它有一个缓冲区。但是,当两个巨大的数字(大于10位)相加时,它只会截断,而不会存储字符串的其余部分Java 使用字符串添加两个大长度数字,java,string,Java,String,我似乎不明白这个用于添加两个字符串的方法有什么错。当存储每个添加的数字并最终显示时,它有一个缓冲区。但是,当两个巨大的数字(大于10位)相加时,它只会截断,而不会存储字符串的其余部分 public static void add(String a,String b){ StringBuilder buf = new StringBuilder(); if((a.length() - 1==0)&&(a.charAt(0)=='0')){ Syste
public static void add(String a,String b){
StringBuilder buf = new StringBuilder();
if((a.length() - 1==0)&&(a.charAt(0)=='0')){
System.out.println(b);
return;
}
if((b.length() - 1==0)&&(b.charAt(0)=='0')){
System.out.println(a);
return;
}
else{
for ( int i1 = a.length() - 1, i2 = b.length() - 1, carry = 0;
(i1 >= 0 && i2 >= 0) || carry != 0;i1--, i2-- ) {
int digit1 = i1 < 0 ? 0 :
Integer.parseInt(Character.toString(a.charAt(i1)));
int digit2 = i2 < 0 ? 0 :
Integer.parseInt(Character.toString(b.charAt(i2)));
int digit = digit1 + digit2 + carry;
if (digit > 9) {
carry = 1;
digit -= 10;
} else {
carry = 0;
}
buf.append(digit);
}
}
System.out.println(buf.reverse().toString());
}
publicstaticvoidadd(字符串a、字符串b){
StringBuilder buf=新的StringBuilder();
如果((a.length()-1==0)&&(a.charAt(0)==0')){
系统输出打印ln(b);
返回;
}
如果((b.length()-1==0)和((b.charAt(0)==0')){
系统输出打印项次(a);
返回;
}
否则{
对于(inti1=a.length()-1,i2=b.length()-1,进位=0;
(i1>=0&&i2>=0)| |进位!=0;i1--,i2--){
int digit1=i1<0?0:
整数.parseInt(Character.toString(a.charAt(i1));
int digit2=i2<0?0:
整数.parseInt(Character.toString(b.charAt(i2));
整数位数=数字1+数字2+进位;
如果(数字>9){
进位=1;
数字-=10;
}否则{
进位=0;
}
buf.追加(数字);
}
}
System.out.println(buf.reverse().toString());
}
由于当i1
和i2
都达到负值时需要停止,因此该条件应为
i1 >= 0 || i2 >= 0 || carry != 0
而不是
(i1 >= 0 && i2 >= 0) || carry != 0
由于当
i1
和i2
均达到负值时需要停止,因此该条件应为
i1 >= 0 || i2 >= 0 || carry != 0
而不是
(i1 >= 0 && i2 >= 0) || carry != 0
由于当
i1
和i2
均达到负值时需要停止,因此该条件应为
i1 >= 0 || i2 >= 0 || carry != 0
而不是
(i1 >= 0 && i2 >= 0) || carry != 0
由于当
i1
和i2
均达到负值时需要停止,因此该条件应为
i1 >= 0 || i2 >= 0 || carry != 0
而不是
(i1 >= 0 && i2 >= 0) || carry != 0
只要使用BigInteger,整个方法就有三行长。只要使用BigInteger,整个方法就有三行长。只要使用BigInteger,整个方法就有三行长。只要使用BigInteger,然后,整个方法有三行长。将变量从int改为long应该可以做到这一点。如果您想了解如何真正做到这一点,请检查BigInteger的源代码:@jbutler483
int
vs.long
在这里应该无关紧要。循环一次只处理两个数字(加上可能的进位),因此它从不处理19以上的值。将变量从int更改为long应该可以做到这一点。如果您想了解如何真正做到这一点,请检查BigInteger的源代码:@jbutler483int
vs.long
在这里应该无关紧要。循环一次只处理两个数字(加上可能的进位),因此它从不处理19以上的值。将变量从int更改为long应该可以做到这一点。如果您想了解如何真正做到这一点,请检查BigInteger的源代码:@jbutler483int
vs.long
在这里应该无关紧要。循环一次只处理两个数字(加上可能的进位),因此它从不处理19以上的值。将变量从int更改为long应该可以做到这一点。如果您想了解如何真正做到这一点,请检查BigInteger的源代码:@jbutler483int
vs.long
在这里应该无关紧要。循环一次只能处理两个数字(加上一个可能的进位),因此它从不处理19以上的值。嘿,问题仍然存在,请尝试将497987965和497987965相加13544@AkhilBalaji非常适合我()。您一定忘了将497987965
along
(该值不适合int
)。多亏它起了作用。嘿,问题仍然存在,请尝试添加497987965和13544@AkhilBalaji非常适合我()。您一定忘了将497987965
along
(该值不适合int
)。多亏它起了作用。嘿,问题仍然存在,请尝试添加497987965和13544@AkhilBalaji非常适合我()。您一定忘了将497987965
along
(该值不适合int
)。多亏它起了作用。嘿,问题仍然存在,请尝试添加497987965和13544@AkhilBalaji非常适合我()。您一定忘了将497987965
along
(该值不适合int
)设置为长值。谢谢您让它正常工作。