“大整数相加”的递归解法

:D 最近毕业在即,经常流连于各大公司的笔试面试之间,不断的面试,不断的杯具…… :cry:
最后发现好多题目都是似曾相识,这里就介绍一条经典的题目——编程实现两个大整数的相加
函数接口如下:
String addBigInt(StringBuffer num1, StringBuffer num2);

思路分析:
1、如果用递归的思想来看,其实就是第i位的数字相加,剩余的i-1位组成的大数,继续进行递归流程
2、目标相加的字符串需要先倒序,保证位对齐,而结果再倒序,则可以得到正确的答案

代码如下:

/**
* @author Micah
*
*/
public class Calculator {

/**
* use the recursion to add the big integer.
*
* @param num1
* @param num2
* @param isCarry
* @param result
*/
public static void addBigInt(StringBuffer num1, StringBuffer num2, int pos,
boolean isCarry, StringBuffer result) {
if (pos < num1.length() || pos < num2.length()) {
int value = 0;
if (isCarry) {
value++;
}
char temp1 = pos < num1.length() ? num1.charAt(pos) : '0';
char temp2 = pos < num2.length() ? num2.charAt(pos) : '0';
value += add(temp1, temp2);
if (value >= 10) {
isCarry = true;
value -= 10;
} else {
isCarry = false;
}
result.append(value);
addBigInt(num1, num2, ++pos, isCarry, result);
} else {
if (isCarry) {
result.append('1');
addBigInt(num1, num2, ++pos, false, result);
}
}

}

/**
* add method for big number.
*
* @param num1
* @param num2
*/
public static String addBigInt(StringBuffer num1, StringBuffer num2) {
StringBuffer result = new StringBuffer();

num1.reverse();
num2.reverse();

addBigInt(num1, num2, 0, false, result);

result.reverse();

return result.toString();
}

// TODO: need to decrease the conversion between different types, maybe a
// array to priorly store all the data.
private static int add(char num1, char num2) {
return Integer.parseInt(String.valueOf(num1))
+ Integer.parseInt(String.valueOf(num2));
}
}


:D 哈,第一次在JavaEye上面发东西,大家多多指教啦~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值