大数加减法 - java实现

计算机处理的各种数据类型都有个范围,超出范围的就处理不了。

如果做超大数运算加减乘除,普通方法肯定是不行的,那么我们遇到大数的运算怎么处理呢?今天介绍一种大数加减乘除运算的方法

思路:

1. 将两个特大的整数利用字符数组作为存储介质。

2. 逐位计算 遍历结果逢十进一。

3. 对存储结果的数组进行翻转处理。

下面上代码:

 1 public class LargeIntSub {
 2     public static void main(String[] args) {
 3         
 4         String a="6789";
 5         String b="123";
 6         int []pa=stringToInts(a);
 7         int []pb=stringToInts(b);
 8         String result_sub=sub(pa,pb);
 9         System.out.println("sub result is:"+result_sub);
10     }
11     
12     public static int[] stringToInts(String s){
13         int[] n = new int[s.length()]; 
14         for(int i = 0;i<s.length();i++){
15         n[i] = Integer.parseInt(s.substring(i,i+1));
16         }
17         return n;
18     }
19     
20     public static String sub(int []a,int []b){
21         StringBuffer sb=new StringBuffer();
22         boolean flag=false;
23         if(a.length<b.length){
24             int c[]=a;
25             a=b;b=c;
26             flag=true;
27         }
28         int a_len= a.length-1;
29         int b_len=b.length-1;
30         int degrade=0;
31         while(a_len>=0||b_len>=0){
32             int temp=0;
33             if(a_len>=0&&b_len>=0){
34                 if((a[a_len]-degrade)<b[b_len]){
35                     temp=a[a_len]+10-b[b_len]-degrade;
36                     degrade=1;
37                 }else{
38                     temp=a[a_len]-b[b_len]-degrade;
39                 }
40             }else if(a_len>=0){
41                 temp=a[a_len]-degrade;
42                 degrade=0;
43             }
44             sb.append(temp+"");
45             
46             a_len--;b_len--;
47         }
48         if(flag){
49             return getNum(sb.append("-").reverse());
50         }
51         return getNum(sb.reverse());
52     }
53     public static String getNum(StringBuffer sb){
54         while(sb.length() > 1 && sb.charAt(0) == '0') {
55             sb.deleteCharAt(0);
56         }
57         return sb.toString();
58     }
59 
60 }

 

posted @ 2018-04-01 11:15  测试人生-  阅读(2601)  评论(0编辑  收藏  举报