import java.util.*;
public class test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] a = new int[100];
int[] b = new int[100];
int[] c = new int[100];
int r = 0;
System.out.println("请输入a");
String strA = sc.nextLine();
for(int i = 0; i < strToChar(strA).length; i++) {
// 经过下面的方法翻转的数组到这里会a变成 ……0000000001234
a[a.length - 1 - i] = Integer.parseInt(strToChar(strA)[i] + "");
}
System.out.println();
System.out.println("请输入b");
String strB = sc.nextLine();
for(int i = 0; i < strToChar(strB).length; i++) {
// 经过下面的方法翻转的数组到这里会a变成 ……000000000123
b[b.length - 1 - i] = Integer.parseInt(strToChar(strB)[i] + "");
}
/*
相加 0001234
0000123
0001357
*/
for(int i = c.length-1; i >= 0; i--) {
c[i] = a[i] + b[i] + r;
int s = c[i];
if(c[i]/10 != 0) {
r = c[i] / 10;
c[i] = c[i]%10;
}else {
r = 0;
}
}
boolean flag = false;
for (int i = 0; i < c.length; i++) {
// 0001357 1是最高位不可能为零,所以当遇到c[i]不为零时,余下的数就可以输出了
if(c[i] != 0){
flag = true;
}
if(flag){
System.out.print(c[i]);
}
}
sc.close();
}
/**
* 将字符串转换为字符数组并且翻转
* 为什么要翻转呢?
* 1、输入a: 1234 经过翻转: 4321
* 2、输入b:123 经过翻转: 321
* 这样高位就不会和低位相加
* @param str
* @return
*/
public static char[] strToChar(String str) {
char[] ch = str.toCharArray();
for(int i = 0; i < ch.length/2; i++) {
char temp = ch[i];
ch[i] = ch[ch.length-1-i];
ch[ch.length-1-i] = temp;
}
return ch;
}
}
转载自其他博主
import java.math.BigDecimal;
import java.util.Scanner;
public class 高精度算法1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal aBigDecimal;
BigDecimal bigDecimal;
BigDecimal cBigDecimal;
Scanner sc=new Scanner(System.in);
aBigDecimal=sc.nextBigDecimal();
bigDecimal=sc.nextBigDecimal();
cBigDecimal=aBigDecimal.add(bigDecimal);
System.out.println(cBigDecimal);
}
}