A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 默狼 中级黑马   /  2013-11-22 01:36  /  1356 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个数相加超过long的范围应该怎么做

评分

参与人数 1黑马币 +2 收起 理由
田磊阳 + 2

查看全部评分

2 个回复

倒序浏览
a  用BigDecimal类。
b  如果不用BigDecimal,把相加的两个数转换成为String类型,然后通过String里的方法每次取一个数(即字符) 从个位加起。
  1. import java.math.BigDecimal;
  2. public class Class1 {
  3.     public static void main(String[] args) {
  4.         Class1 c=new Class1();
  5.         BigDecimal bi1=new BigDecimal("1234567890123456789043876945");
  6.         BigDecimal bi2=new BigDecimal("123456789098765432112345622232323232323");
  7.         BigDecimal bi3=bi1.add(bi2);
  8.         System.out.println(c.add("1234567890123456789043876945","123456781098765432112345622232323232323"));
  9.         System.out.println(bi3);
  10.     }  
  11.     public String add(String a,String b){
  12.         if(a.length()>b.length()){
  13.             return adds(a.trim(),b.trim());
  14.         }else{
  15.             return adds(b.trim(),a.trim());
  16.         }
  17.     }
  18.     private  String  adds(String a,String b){
  19.         int tmp=0;
  20.         int t=0;
  21.         char[] nc=new char[a.length()];
  22.         for(int i=a.length()-1,j=i-(a.length()-b.length());i>=0;i--){
  23.             if(a.charAt(i)>47&&a.charAt(i)<58){
  24.                 t=tmp+(int)a.charAt(i)-48;
  25.             }else{
  26.                 throw new FormatException(a+"第"+(i+1)+"个字符不是数字");
  27.             }
  28.             if(j>=0){
  29.                 if(b.charAt(j)>47&&b.charAt(j)<58){
  30.                     t=t+(int)b.charAt(j)-48;
  31.                 }else{
  32.                     throw new FormatException(b+"第"+(j+1)+"个字符不是数字");
  33.                 }      
  34.             }
  35.             tmp=t/10;
  36.             nc[i]=(char)(t%10+48);
  37.             j--;
  38.         }   
  39.         if(tmp>0){
  40.           return tmp+new String(nc);
  41.        }else{
  42.           return new String(nc);
  43.       }

  44.     }
  45. }
  46. class FormatException extends RuntimeException {
  47.     public FormatException(String string) {
  48.         super(string);
  49.     }
  50. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
陈文杰 发表于 2013-11-22 02:13
a  用BigDecimal类。
b  如果不用BigDecimal,把相加的两个数转换成为String类型,然后通过String里的方法 ...

:handshake多谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马