如(1) 12345678901234567890468+4574617 = ?;(2)1234567890123456789043876945 + 1234567890987654321123456 = ?a 用BigDecimal类的话 怎么写这个这个程序 求完整版本。b 如果不用BigDecimal,把相加的两个数转换成为String类型,然后通过String里的方法每次取一个数(即字符) 从个位加起,这样的算法如何实现?c 各位网友还有其它好办法么?求指教~!
有BigDecimal的用法,也有我写的一个相加的方法,参考下。方法很多的还可以把分成若干个int段分段计算后再加到一起。import java.math.BigDecimal;public class Class1 { public static void main(String[] args) { Class1 c=new Class1(); BigDecimal bi1=new BigDecimal("1234567890123456789043876945"); BigDecimal bi2=new BigDecimal("123456789098765432112345622232323232323"); BigDecimal bi3=bi1.add(bi2); System.out.println(c.add("1234567890123456789043876945","123456781098765432112345622232323232323")); System.out.println(bi3); } public String add(String a,String b){ if(a.length()>b.length()){ return adds(a.trim(),b.trim()); }else{ return adds(b.trim(),a.trim()); } } private String adds(String a,String b){ int tmp=0; int t=0; char[] nc=new char[a.length()]; for(int i=a.length()-1,j=i-(a.length()-b.length());i>=0;i--){ if(a.charAt(i)>47&&a.charAt(i)<58){ t=tmp+(int)a.charAt(i)-48; }else{ throw new FormatException(a+"第"+(i+1)+"个字符不是数字"); } if(j>=0){ if(b.charAt(j)>47&&b.charAt(j)<58){ t=t+(int)b.charAt(j)-48; }else{ throw new FormatException(b+"第"+(j+1)+"个字符不是数字"); } } tmp=t/10; nc[i]=(char)(t%10+48); j--; } if(tmp>0){ return tmp+new String(nc); }else{ return new String(nc); } }}class FormatException extends RuntimeException { public FormatException(String string) { super(string); }}
计算的人只要知道最后的答案就行 所以你不一定要输出一个long型比如你只要按位数4574617作为一个数组 然后与123.。。467这个数组逐个相加然后进位 最后得到一个int型数组 再把数组逐个输出就行了 追问 用数组的方式怎么解决?可以写个算法不?
BigInteger sum = new BigInteger("1234567890123456789043876945").add(new BigInteger("1234567890987654321123456"));