您的位置:首页 > 编程语言 > Java开发

java实现大数相加

2011-09-14 13:33 429 查看
算法大致思路如下:

将大数存入数组

比如 5647,8971

存入数组a={5,6,4,7}, b={8,9,7,1}

首先从最低位开始相加,记录是否有进位

在进行次低位相加,外加最低位的进位

依次类推,可以引人另一数组来存储结果

程序转载:http://hi.baidu.com/sawen21/blog/item/42c68964a6d107f7f73654b5.html

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.StringTokenizer;

/**

* Created by IntelliJ IDEA.

* User: FLY

* Date: 11-9-14

* Time: 下午12:50

* To change this template use File | Settings | File Templates.

*/

public class BigIntegerOperation {

public static void main(String[] args) throws IOException {

/**

* 从控制台读取输入数据 格式为 num1空格num2 为空则exit

*/

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.println("请输入两个大数(格式为:a b)\n");

String str = in.readLine();

while(str!=null){

StringTokenizer st = new StringTokenizer(str," ");

String num1 = st.nextToken();

String num2 = st.nextToken();

int len1 = num1.length();

int len2 = num2.length();

/**

* 将不等长的两输入字符串格式化,比如 num1 = 123 num2 = 1234

* 经格式化后将成为num1 = 0123 num2 = 1234为方便计算

*/

if(len1 > len2){

for(int i=0; i< len1-len2; i++){

num2 = "0"+num2;

}

}else if(len2>len1){

for(int i=0; i< len2-len1; i++){

num1 = "0"+num1;

}

}

int[] arr1 = BigIntegerOperation.str2intArr(num1);

int[] arr2 = BigIntegerOperation.str2intArr(num2);

arr1 = BigIntegerOperation.reverse(arr1);

arr2 = BigIntegerOperation.reverse(arr2);

int[] result = BigIntegerOperation.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("请输入两个大数(格式为:a b)\n");

str = in.readLine();

}

}

/**

* 倒置数组元素

*/

public static int [] reverse(int[] arr){

int len = arr.length;

for(int i = 0,j = len-1; i<j; i++,j--){

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

return arr;

}

/**

* 将字符串转换成整型数组

*/

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;

}

/**

* 核心方法 两个整型数组相加

*/

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: