在java中,两个超长整形数相加,已经超过了long 的存储范围,怎么计算它的值呢?

如(1)12345678901234567890468+4574617=?;(2)1234567890123456789043876945+123456789098765... 如(1) 12345678901234567890468+4574617 = ?;
(2)1234567890123456789043876945 + 1234567890987654321123456 = ?

a 用BigDecimal类的话 怎么写这个这个程序 求完整版本。
b 如果不用BigDecimal,把相加的两个数转换成为String类型,然后通过String里的方法每次取一个数(即字符) 从个位加起,这样的算法如何实现?
c 各位网友还有其它好办法么?求指教~!
展开
 我来答
llei32wang
2013-01-26 · TA获得超过2736个赞
知道大有可为答主
回答量:1478
采纳率:60%
帮助的人:1408万
展开全部
有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);
}
}
lishunshen20
2013-01-25 · TA获得超过588个赞
知道答主
回答量:348
采纳率:0%
帮助的人:104万
展开全部
计算的人只要知道最后的答案就行 所以你不一定要输出一个long型
比如你只要按位数4574617作为一个数组 然后与123.。。467这个数组逐个相加然后进位 最后得到一个int型数组 再把数组逐个输出就行了
追问
用数组的方式怎么解决?可以写个算法不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jamxval
2013-01-26 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1437万
展开全部
BigInteger sum = new BigInteger("1234567890123456789043876945")
.add(new BigInteger("1234567890987654321123456"));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
517052452
2013-01-26 · 超过21用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:47.1万
展开全部
用科学技算咯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式