既然是“大數(shù)”,那就可能出現(xiàn)BigInteger長(zhǎng)度不夠的情況,所以不能直接使用樓上的方法。
成都創(chuàng)新互聯(lián)成立于2013年,先為大寧等服務(wù)建站,大寧等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為大寧企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
關(guān)于“大數(shù)”的定義,需要樓主提供問題細(xì)節(jié):
1.被減數(shù)、減數(shù)是否會(huì)出現(xiàn)負(fù)數(shù)
2.結(jié)果是否會(huì)出現(xiàn)負(fù)數(shù)
負(fù)數(shù)情況可先轉(zhuǎn)化為絕對(duì)值的加減,然后根據(jù)大小關(guān)系為結(jié)果添加正負(fù)號(hào)解決。所以,暫時(shí)先討論最簡(jiǎn)單、最基本的情況即 a,b都為正整數(shù),且ab的情況
1.建議把兩個(gè)數(shù)組改成倒序排列 這樣相減時(shí)可以由a[0]和b[0]開始,即int[] a = { 7, 0, 1, 8, 5, 3, 7 }; int[] b = { 2, 4, 7, 4, 5};
2.遍歷兩個(gè)數(shù)組a和b,a[i]-b[i],夠減則直接把結(jié)果存入a[i],不夠減則a[i]+10-b[i]存入a[i],并且a[i+1]=a[i+1]-1,(這里如果不夠減,再借位a[i+1]=a[i+1]+10-1;a[i+2]=a[i+2]-1,以此類推,可用遞歸實(shí)現(xiàn))遍歷至b.length結(jié)束,然后再將a[i]倒序輸出,即為結(jié)果。
package test;
public class DoubleTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(Long.MAX_VALUE);//最大數(shù):9223372036854775807
System.out.println(Long.MIN_VALUE);//最小數(shù):-9223372036854775808
System.out.println(Double.MAX_VALUE);//最大數(shù):1.7976931348623157E308
System.out.println(Double.MIN_VALUE);//最小數(shù):4.9E-324
Double a = 9223372036854775807d;
Double b = 9223372036854775807d;
Double c =a+b;
System.out.println(c);
}
}
用Double型吧。最大了。
import java.math.BigInteger;
public class BigIntegerGet {
public String getAdd(String Str1,String Str2){
String Str3=new String();
BigInteger BigInt1=new BigInteger(Str1);
BigInteger BigInt2=new BigInteger(Str2);
BigInt1=BigInt1.add(BigInt2);
Str3=BigInt1.toString();
return Str3;
}
public String getSubtract(String Str1,String Str2){
String Str3=new String();
BigInteger BigInt1=new BigInteger(Str1);
BigInteger BigInt2=new BigInteger(Str2);
BigInt1=BigInt1.subtract(BigInt2);
Str3=BigInt1.toString();
return Str3;
}
public String getMultiply(String Str1,String Str2){
String Str3=new String();
BigInteger BigInt1=new BigInteger(Str1);
BigInteger BigInt2=new BigInteger(Str2);
BigInt1=BigInt1.multiply(BigInt2);
Str3=BigInt1.toString();
return Str3;
}
public String getDivide(String Str1,String Str2){
String Str3=new String();
BigInteger BigInt1=new BigInteger(Str1);
BigInteger BigInt2=new BigInteger(Str2);
BigInt1=BigInt1.divide(BigInt2);
Str3=BigInt1.toString();
return Str3;
}
}
花了十分鐘,親手給你訂制的,測(cè)試過了正確
下面給你貼出源代碼
public class AddSub {
public static void main(String[] args) {
String a="4632864832684683568465765487657665765236465244";
String b="47";
int []pa=stringToInts(a);
int []pb=stringToInts(b);
String ans_add=add(pa, pb);
String ans_sub=sub(pb,pa);
System.out.println("相加結(jié)果是:"+ans_add);
System.out.println("相減結(jié)果是:"+ans_sub);
}
public static int[] stringToInts(String s){
int[] n = new int[s.length()];
for(int i = 0;is.length();i++){
n[i] = Integer.parseInt(s.substring(i,i+1));
}
return n;
}
public static String add(int []a,int []b){
StringBuffer sb=new StringBuffer();
int a_len= a.length-1;
int b_len=b.length-1;
int jinwei=0;//進(jìn)位
while(a_len=0||b_len=0){
int temp=0;
if(a_len=0b_len=0){
temp=a[a_len]+b[b_len]+jinwei;
}else if(a_len=0){
temp=a[a_len]+jinwei;
}else if(b_len=0){
temp=b[b_len]+jinwei;
}
sb.append(temp%10+"");
jinwei=temp/10;
a_len--;b_len--;
}
return getNum(sb.reverse());
}
public static String sub(int []a,int []b){
StringBuffer sb=new StringBuffer();
boolean flag=false;//判斷a是不是比b小
if(a.lengthb.length){
int c[]=a;
a=b;b=c;
flag=true;
}
int a_len= a.length-1;
int b_len=b.length-1;
int jiewei=0;//借位
while(a_len=0||b_len=0){
int temp=0;
if(a_len=0b_len=0){
if((a[a_len]-jiewei)b[b_len]){
temp=a[a_len]+10-b[b_len]-jiewei;
jiewei=1;
}else{
temp=a[a_len]-b[b_len]-jiewei;
}
}else if(a_len=0){
temp=a[a_len]-jiewei;
jiewei=0;
}
sb.append(temp+"");
a_len--;b_len--;
}
if(flag){
return getNum(sb.append("-").reverse());
}
return getNum(sb.reverse());
}
//去掉最前面的0
public static String getNum(StringBuffer sb){
while(sb.length() 1 sb.charAt(0) == '0') {
sb.deleteCharAt(0);
}
return sb.toString();
}
}