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

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

2015-10-24 10:10 639 查看
问题:

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

思路:

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

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

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

具体代码如下:

/**
* 用字符串模拟两个大数相加
* @param n1 加数1
* @param n2 加数2
* @return   相加结果
*/
public static String add2(String n1,String n2)
{
StringBuffer result = new StringBuffer();

//1、反转字符串
n1 = new StringBuffer(n1).reverse().toString();
n2 = new StringBuffer(n2).reverse().toString();

int len1 = n1.length();
int len2 = n1.length();
int maxLen = len1 > len2 ? len1 : len2;
boolean nOverFlow = false; //是否越界
int nTakeOver = 0 ; //溢出数量

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

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

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 str = add2("911","222");
System.out.println(str);
}


结果:

1133


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