`
longfor5
  • 浏览: 50606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

两个大数相加的三种实现方法

 
阅读更多

方法一:

import java.math.BigDecimal;



/**
 * 两个大数相加
 *
 * @author 
 * @version $Id: BigNumberAdd.java, v 0.1 2014年8月18日 下午2:13:20 
 */
public class BigNumberAdd1 {
    
    public static void main(String[] args) {
        
        String num1 = "34646313135453431";
        String num2 = "999999999121111";
        
        int len1 = num1.length();
        int len2 = num2.length();
        
        if(len1 > len2){
            for(int i=0; i<len1 - len2; i++){
                num2 = "0" + num2;
            }
        } else if (len1 < len2){
            for(int i=0; i<len2-len1; i++){
                num1 = "0" + num1;
            }
        }
        int[] arr1 = str2intArr(num1);
        int[] arr2 = str2intArr(num2);
        arr1 = reverse(arr1);
        arr2 = reverse(arr2);
        
        int[] result = add(arr1, arr2);
        
        for(int i=result.length-1; i>=0; i--){
            if(i == result.length-1 && result[i] == 0) continue;
            System.out.print(result[i]);
        }
        
        System.out.println();
        System.out.println("****************以下为对照结果******************");
        
        BigDecimal b1 = new BigDecimal(num1);
        BigDecimal b2 = new BigDecimal(num2);
        
        BigDecimal b3 = b1.add(b2);
        System.out.println(b3);
    }
    
    /**
     * 核心方法   两个整型数组相加 
     *
     * @param a
     * @param b
     * @return
     */
    public static int[] add(int[] a,int[] b){
        int maxlen = a.length;
        int[] sum = new int[maxlen + 1];
        for(int i=0; i<maxlen; i++){
            int tempSum = a[i] + b[i];
            sum[i] += tempSum % 10;
            int d = tempSum / 10; // 进位
            sum[i+1] += d;
        }
        return sum;
    }
    
    /**
     * 将字符串转换成整型数组
     *
     * @param str
     * @return
     */
    public static int[] str2intArr(String str){
        int len = str.length();
        int[] arr = new int[len];
        for(int i=0; i<len; i++){
            arr[i]  = str.charAt(i) - '0';
        }
        return arr;
    }
    
    /**
     * 倒置数组元素
     *
     * @param arr
     * @return
     */
    public static int[] reverse(int[] arr){
        for(int i=0,j=arr.length-1;i<j; i++,j--){
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        return arr;
    }
    
    public static void print(int[]  arr){
        for(int i=0; i<arr.length; i++){
            System.out.print(arr[i]);
        }
        System.out.println();
    }

}

 方法二:

public class BigNumberAdd2 {

    public static void main(String[] args) {
        String str1 = "34646313135453431";
        String str2 = "999999999121111";

        int len1 = str1.length();
        int len2 = str2.length();
        if(len1 > len2){
            for(int i=0; i<len1-len2; i++){
                str2 = "0" + str2;
            }
        } else if(len1 < len2){
            for(int i=0; i<len2-len1; i++){
                str1 = "0" + str1;
            }
        }
        System.out.println(add(str1, str2));
    }
    
    public static String add(String str1, String str2){
        boolean flag = false;
        String result = "";
        for(int i=str1.length()-1; i>=0; i--){
            int a = str1.charAt(i) - '0';
            int b = str2.charAt(i) - '0';
            int sum = 0;
            if(flag){
                sum  = 1;
            } 
            sum += (a + b);
            if(sum / 10 > 0){
                flag = true;
            } else {
                flag = false;
            }
            result = sum % 10 + result;
        }
        return result;
    }
    
}

 方法三:

public class BigNumberAdd3 {

    public static void main(String[] args) {
        String num1 = "34646313135453431";
        String num2 = "999999999121111";
        
        int len1 = num1.length();
        int len2 = num2.length();
        
        if(len1 > len2){
            for(int i=0; i<len1 - len2; i++){
                num2 = "0" + num2;
            }
        } else if (len1 < len2){
            for(int i=0; i<len2-len1; i++){
                num1 = "0" + num1;
            }
        }
        
        int[] arr = new int[len1 + 1];
        
        for(int i=len1-1; i>=0; i--){
            int a = num1.charAt(i) - '0';
            int b = num2.charAt(i) - '0';
            arr[i+1] = a + b; 
        }
        
        for(int i=len1; i>0; i--){
            int temp = arr[i];
            arr[i] = temp % 10;
            arr[i-1] = arr[i-1] + temp / 10;
        }
        String result = toString(arr);
        if(result.charAt(0) == '0') {
            result = result.substring(1);
        }
        System.out.println(result);
    }
    
    public static String toString(int[] arr){
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<arr.length; i++){
            sb.append(arr[i]);
        }
        return sb.toString();
    }
}

 

分享到:
评论

相关推荐

    两个大数相加-字符串实现

    字符串实现大数相加,首先两个数是用计算机的位数不能表示出来的,然后我们用字符数组进行操作!

    两个大数相加的运行程序

    采用单链表的做的,以一万分界点,每个节点有四位数

    用C语言编写两个大数相加

    该资源是用C语言编写两个超过100位的大数相加

    用c++编写的大数相加

    用c++编写的大数相加,可以实现任意两个长度的大数相加求和。

    大数相加.cpp

    该文件为C/C++课程对于大数相加问题的解决, /*大数相加*/ /*在一般语言中对整型数都有个最大限制, 先给出两个超出正常范围的十进制数 对其进行求和,带进位的加法*/

    C++大数相加

    C++实现的大数相加,有很好的类的封装性

    js代码-两个大数相加

    js代码-两个大数相加

    大数相加实现

    输入包括两个数a和b,其中a和b的位数不超过1000位。

    用栈实现了大数相加(C++)

    用栈实现了两个大数相加,解决了long类型的越界问题,用于学习数据结构,C++实现的demo,内含源代码,可以运行。

    【c++】大数相加

    使用string类型实现大数相加。先将两个加数存为String类型,再从两个加数的末尾开始,一个数一个数的相加,跟做普通加法一个原理,只是这里需要注意的是,两个加数的类型为字符串,需要相应的转换才能相加,在代码有...

    实现大数相加功能

    当计算机的类型无法满足需要时,如50位的数字无法用double,int等类型显示时,只有自己写程序实现大数相加功能

    C++用类实现大数相加

    #include #include using namespace std; class ds { public: void equal(string x,string y,int...{//两个字符串一样长的时候; int flag =0; int i; int sum =0; int k = 0; int add[1000]; for(i=0;i;i++)

    实现2个大数(80位左右)相加

    实现2个80位左右的大数相加,暂时不支持负数,只支持正整数。

    大数相加jar包(一个简单算法的实现)

    Java 语言实现的大数相加程序。一个简单算法的实现。此前,在学校学习时,用C++编码解决过这个问题,当时还没写出来。

    JavaScript大数相加相乘的实现方法实例

    本文讲一下如何利用字符串在 JavaScript 中实现大数相加相乘。 相加 用字符串实现相加相乘基本思路就是按照我们在纸上进行竖式运算一样。对于加法,我们需要将两个数 num1 和 num2 上下对齐,然后从个位开始计算两个...

    java编程实现两个大数相加代码示例

    主要介绍了java编程实现两个大数相加代码示例,具有一定参考价值,需要的朋友可以了解下。

    C++ 两个大数相加.7z

    几个小函数,为初学者提供一点点帮助,希望孩子们路越走越好。

    两个大数之和

    两个 超大数 相加,之和。 用 c 语言 来编写。

    C语言-大数加法

    C语言 实现大数加法,在加法运算的时候假如有两个10000位数的两个数进行相加,那么用int long double型都装不下这么多位数,所以采用char数组来实现加法运算,解决精度的问题

Global site tag (gtag.js) - Google Analytics