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

用字符串模拟两个大数相加——java实现

2017-03-25 17:33 316 查看
转自:http://www.cnblogs.com/0201zcr/p/4906283.html

问题:

  大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。

思路:

   1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;

            2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;

            3.把两个正整数相加,一位一位的加并加上进位。

具体代码如下:

package temp.test;

/*
* 功能:利用字符串模拟大数加法
*/
public class Test {

public static String add(String n1, String n2){
StringBuilder result = new StringBuilder();

// 反转字符串
String rn1 = new StringBuilder(n1).reverse().toString();
String rn2 = new StringBuilder(n2).reverse().toString();

int len1 = rn1.length();
int len2 = rn2.length();

int maxLen = len1 > len2 ? len1 : len2;

boolean nOverFlow = false;// 是否越界
int nTakeOver = 0;// 溢出数量

// 把两个字符串补齐,即短字符串的高位用0补齐
if(len1 < len2){
for(int i = len1; i < len2; i++){
rn1 += "0";
}
}else{
for(int i = len2; i < len1; i++){
rn2 += "0";
}
}

// 把两个正整数相加,一位一位的加 并加上进位
for(int i = 0; i < maxLen; i++){
int nSum = Integer.parseInt(rn1.charAt(i) + "") + Integer.parseInt(rn2.charAt(i) + "");
nSum = nSum + nTakeOver;// 加上前一位的进位

if(nSum >= 10){
if(i == maxLen - 1){// 已经计算到最后一位了
nOverFlow = true;
}

nTakeOver = 1;//溢出了
result.append(nSum - 10);
}else{
nTakeOver = 0;// 没溢出
result.append(nSum);
}
}

// 如果溢出的话 表示位增加了
if(nOverFlow){
result.append(nTakeOver);
}

return result.reverse().toString();
}

public static void main(String[] args){
String n1 = "999999999";
String n2 = "999999999";
System.out.println(Test.add(n1, n2));
}

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