黑马程序员技术交流社区

标题: 两个数相加超过long的范围应该怎么做 [打印本页]

作者: 默狼    时间: 2013-11-22 01:36
标题: 两个数相加超过long的范围应该怎么做
两个数相加超过long的范围应该怎么做
作者: 陈文杰    时间: 2013-11-22 02:13
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. }
复制代码

作者: 默狼    时间: 2013-11-22 14:05
陈文杰 发表于 2013-11-22 02:13
a  用BigDecimal类。
b  如果不用BigDecimal,把相加的两个数转换成为String类型,然后通过String里的方法 ...

:handshake多谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2