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

大数加法
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于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;
}

版权声明:本文为huanongying123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。