import java.math.BigInteger;
import java.util.Scanner;
public class 自己模拟超大叔加法 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入第一个数:");
String a = null;
String b = null;
boolean boo = false;
while(!boo){
a = scan.nextLine();
for(int i = 0;i < a.length();i++){
if(!(a.charAt(i)>='0'&&a.charAt(i)<='9')){
System.out.println("您输入的第一个数据有误,请重新输入...");
boo = false;
break;
}else{
boo = true;
}
}
}
boo = false;
System.out.println("请输入第二个数:");
while(!boo){
b = scan.nextLine();
for(int i = 0;i < b.length();i++){
if(!(b.charAt(i)>='0'&&b.charAt(i)<='9')){
System.out.println("您输入的第二个数据有误,请重新输入...");
boo = false;
break;
}else{
boo = true;
}
}
}
System.out.print("请输入第二个数:");
b = scan.nextLine();
for(int i = 0;i < b.length();i++){
if(!(b.charAt(i)>='0'&&b.charAt(i)<='9')){
System.out.println("您输入的数据有误!");
break;
}
}
String sum = add(a,b);
System.out.println("计算机计算的结果:" + new BigInteger(a).add(new BigInteger(b)) + "");//计算机用BigInteger计算的结果
System.out.println("我自己计算的结果:" + sum);//我自己计算的结果
}
private static String add(String a, String b) {
StringBuffer sb = new StringBuffer();
int x = 0;//表示进位
for(int i = 0;i < Math.max(a.length(), b.length()) + 1;i++){
int aa = i < a.length() ? a.charAt(a.length() - i - 1)-'0' : 0;//判断是否出界
int bb = i < b.length() ? b.charAt(b.length() - i - 1)-'0' : 0;//判断是否出界
int c = aa + bb + x;
if(c>=10){
c = c - 10;
x = 1;
sb.append(c + "");
}else{
x = 0;
sb.append(c + "");
}
}
sb.append(x + "");//加上最后的进位
String s = sb.reverse() + "";
//System.out.println(s);
int count = 1;
if(s.startsWith("0")){//去掉前面的0
for(int i = 0;i<s.length() - 1;i++){
if(s.charAt(i)=='0'&&s.charAt(i+1)=='0'){
count++;
}else{
break;
}
}
}
//System.out.println("count = " + count);
return s.substring(count);
}
}
自己模拟超大数加法
最新推荐文章于 2021-02-07 03:46:19 发布