黑马程序员技术交流社区
标题:
两个数相加超过long的范围应该怎么做
[打印本页]
作者:
默狼
时间:
2013-11-22 01:36
标题:
两个数相加超过long的范围应该怎么做
两个数相加超过long的范围应该怎么做
作者:
陈文杰
时间:
2013-11-22 02:13
a 用BigDecimal类。
b 如果不用BigDecimal,把相加的两个数转换成为String类型,然后通过String里的方法每次取一个数(即字符) 从个位加起。
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);
}
}
复制代码
作者:
默狼
时间:
2013-11-22 14:05
陈文杰 发表于 2013-11-22 02:13
a 用BigDecimal类。
b 如果不用BigDecimal,把相加的两个数转换成为String类型,然后通过String里的方法 ...
:handshake多谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2