算法-大数加法和大数乘法

大数加法
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)

public String solve_add(String s, String t) {
	int len1 = s.length();
	int len2 = t.length();
	int i = len1 - 1;
	int j = len2 - 1;
	int x = 0;
	int y = 0;
	int m = 0;//商
	int n = 0;//余数
	StringBuilder sb = new StringBuilder();
	while (i >= 0 || j >= 0) {
		if (i >= 0) {
			x = s.charAt(i) - '0';
		} else {
			x = 0;
		}
		if (j >= 0) {
			y = t.charAt(j) - '0';
		} else {
			y = 0;
		}
		int sum = x + y + m;
		m = sum / 10;
		n = sum % 10;
		sb.append(n);
		i--;
		j--;
	}
	if (m > 0) {
		sb.append(m);
	}
	sb.reverse();
	return sb.toString();
}

大数乘法
以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。
(字符串长度不大于10000,保证字符串仅由’0’~'9’这10种字符组成)

public String solve_multiply(String s, String t) {
	int len1 = s.length();
	int len2 = t.length();
	int x = 0;
	int y = 0;
	String[] array = new String[len2];
	//按照乘数,每一位计算一次,进位则乘10,并放入数组
	for (int k = len2 - 1; k >= 0; k--) {
		int m = 0;//商
		int n = 0;//余数
		int i = len1 - 1;
		StringBuilder sb = new StringBuilder();
		while (i >= 0) {
			if (i >= 0) {
				x = s.charAt(i) - '0';
			}
			if (k >= 0) {
				y = t.charAt(k) - '0';
			}
			int sum = x * y + m;
			m = sum / 10;
			n = sum % 10;
			sb.append(n);
			i--;
		}
		if (m > 0) {
			sb.append(m);
		}
		sb.reverse();
		for (int p = 0; p < len2 - 1 - k; p++) {
			sb.append("0");
		}
		array[k] = sb.toString();
	}
	//最后调用大数加法函数,将数组中所有的值相加
	String sum = "0";
	for (int kk = 0; kk < len2; kk++) {
		sum = solve_add(array[kk], sum);
	}
	return sum;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值