Java语言实现两个超级大数相加

两个超级大数相加

当两个数num1, num2特别大的时候,也就是超级大数,用int, long 明显不足。
在num1 和num2 的长度都小于 5100,不包含任何前导零并且不使用任何內建 BigInteger 库时,可以转换成字符串,逐个字符处理。
Java语言(使用StringBuilder 对象):

public class SuperLargeNumberAddition {
	public static String stringAdd(String num1, String num2) {
		// 存放结果的 StringBuilder 对象
		StringBuilder resultstr = new StringBuilder();
		
		// numlength1, numlength2 表示字符串 num1, num2 的长度. carry 代表进位
		int numlength1 = num1.length()-1, numlength2 = num2.length()-1, carry = 0;
		int x, y, sum;
		// 当 num1,num2 结束 并且不需要进位的时候退出循环
		while(numlength1 >= 0 || numlength2 >= 0 || carry != 0) {
			// 取字符串的字符减 字符0 即可得到对应数字
			x = numlength1 < 0 ? 0 : num1.charAt(numlength1--)-'0';
			y = numlength2 < 0 ? 0 : num2.charAt(numlength2--)-'0';
			// 计算和
			sum = x+y+carry;
			// 添加到字符串尾部
			resultstr.append(sum%10);
			
			/* 如果插入到s字符串的第一个位置,就不需要使用reverse()
			 * s.insert(0, sum % 10);
			 */
			
			// 更新进位
			carry = sum/10;
		}
		return resultstr.reverse().toString();
	}
	public static void main(String[] args) {
		String str1 = "123456789987654321", str2 = "147258369963852741";
		String resultstr = stringAdd(str1, str2);
		System.out.println(resultstr);

	}
}
/* Code Running Results:
 * 270715159951507062
 */

Java语言(使用递归):

public class SuperLargeNumberAdditionTwo {
	public static String stringAdd(String num1, String num2) {
		return stringAddRecursion(num1, num1.length()-1, num2, num2.length()-1, 0);
	}
	public static String stringAddRecursion(String num1, int numlength1, String num2, int numlength2, int carry) {
		// 参数:numlength1, numlength2 表示字符串 num1, num2 的长度. carry 代表进位
		// 当 num1,num2 结束 并且不需要进位的时候返回空字符串
		if(numlength1 < 0 && numlength2 < 0 && carry == 0)
			return "";
		// 取字符串的字符减 字符0 即可得到对应数字
		carry += numlength1 < 0 ? 0 : num1.charAt(numlength1--)-'0';
		carry += numlength2 < 0 ? 0 : num2.charAt(numlength2--)-'0';
		int digit = carry%10;
		// 更新进位
		carry /= 10;
		// 递归
		String resultstr = stringAddRecursion(num1, numlength1, num2, numlength2, carry);
		return resultstr + digit;
	}
	public static void main(String[] args) {
		String str1 = "123456789987654321", str2 = "147258369963852741";
		String resultstr = stringAdd(str1, str2);
		System.out.println(resultstr);

	}
}
/* Code Running Results:
 * 270715159951507062
 */
原文地址:https://www.cnblogs.com/jiaohuadehulike/p/14295013.html