package test;
public class BigNumAdd {
public static void main(String[] args) {
System.out.println(add("45", "14"));
System.out.println(add("-8435753544364", "-7786843754117"));
System.out.println(add("8435753544364", "-7786843754117"));
System.out.println(add("-84", "84"));
System.out.println(add("845", "-845"));
System.out.println(add("14", "-15"));
System.out.println(add("334", "-15"));
}
public static String add(String a,String b) {
String m = "";
//a,b都为正数
if(a.charAt(0)!='-'&&b.charAt(0)!='-') {
while(a.length()<b.length()) {
a="0"+a;
}
while(a.length()>b.length()) {
b="0"+b;
}
char[] charA = a.toCharArray();
char[] charB = b.toCharArray();
int len = charA.length;
int[] charSum = new int[len+1];
int flag = 0;
for(int i=len-1;i>=0;i--) {
charSum[i+1] = (charA[i]-'0'+charB[i]-'0'+flag)%10;
flag = (charA[i]-'0'+charB[i]-'0'+flag)/10;
}
charSum[0]=flag;
for(int i=0;i<charSum.length;i++) {
if(i==0&&charSum[i]==0)
continue;
m = m+charSum[i];
}
}
//a,b都为负数
else if (a.charAt(0)=='-'&&b.charAt(0)=='-') {
a = a.substring(1);
b = b.substring(1);
while(a.length()<b.length()) {
a="0"+a;
}
while(a.length()>b.length()) {
b="0"+b;
}
char[] charA = a.toCharArray();
char[] charB = b.toCharArray();
int len = charA.length;
int[] charSum = new int[len+1];
int flag = 0;
for(int i=len-1;i>=0;i--) {
charSum[i+1] = (charA[i]-'0'+charB[i]-'0'+flag)%10;
flag = (charA[i]-'0'+charB[i]-'0'+flag)/10;
}
charSum[0]=flag;
for(int i=0;i<charSum.length;i++) {
if(i==0&&charSum[i]==0)
continue;
m = m+charSum[i];
}
m = "-"+m;
}
//a,b一正一负
else {
String pNum="",nNum="",bNum="",sNum= "";
if(a.charAt(0)=='-'&&b.charAt(0)!='-') {
pNum = b;
nNum = a.substring(1);
}
if(a.charAt(0)!='-'&&b.charAt(0)=='-') {
pNum = a;
nNum = b.substring(1);
}
//正数绝对值大ispNumBig=1,负数绝对值大ispNumBig=2,两者绝对值相等ispNumBig=0;
int ispNumBig = 0;
if(nNum.length()>pNum.length()) {//负数大
ispNumBig=2;
bNum = nNum;
sNum = pNum;
}
else if(nNum.length()<pNum.length()) {//正数大
ispNumBig=1;
bNum = pNum;
sNum = nNum;
}
else if(nNum.length()==pNum.length()) {
//正数和负数长度相等
for(int i=0;i<pNum.length();i++) {
if(nNum.charAt(i)-pNum.charAt(i)>0){
//负数大
ispNumBig=2;
bNum = nNum;
sNum = pNum;
break;
}
if(nNum.charAt(i)-pNum.charAt(i)<0) {
//正数大
ispNumBig=1;
bNum = pNum;
sNum = nNum;
break;
}else
continue;
}
if(ispNumBig==0) {
return "0";
}
}
while(sNum.length()<bNum.length()) {
sNum = "0" +sNum;
}
int[] charSum = new int[bNum.length()];
int flag = 0 ;
for(int i=bNum.length()-1;i>=0;i--) {
charSum[i]=(10+bNum.charAt(i)-flag-sNum.charAt(i))%10;
if(bNum.charAt(i)-flag-sNum.charAt(i)<0) {
flag = 1;
}else {
flag = 0;
}
}
int k = 0;
for(int i=0;i<charSum.length;i++) {
if(k==0&&charSum[i]==0)
continue;
m = m+charSum[i];
k=1;
}
if(ispNumBig==2) {
m="-"+m;
}
}
return m;
}
}

图片.png
网友评论