NC10 大数乘法
2023-12-26 12:56:15
描述
以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。
数据范围: 读入的数字大小满足 0≤n≤101000
要求:空间复杂度 O(m),时间复杂度 O(m2)(假设m是n的长度)
示例1
输入:
"11","99"
返回值:
"1089"
说明:
11*99=1089
示例2
输入:
"1","0"
返回值:
"0"
解题思路:
我们可以使用模拟的方法来计算两个数字的乘积。具体步骤如下:
- 定义一个字符串result,用于存储计算结果,初始值为"0"。
- 如果其中一个数字为0,则直接返回result。
- 如果两个数字都不为0,则从低位到高位依次计算每一位的乘积,并将结果加到result中。
- 最后返回result。
Java代码实现如下:
public String multiply(String num1, String num2) {
int n1 = num1.length(), n2 = num2.length();
int[] res = new int[n1 + n2];
for (int i = n1 - 1; i >= 0; i--) {
int n1i = num1.charAt(i) - '0';
for (int j = n2 - 1; j >= 0; j--) {
int n2j = num2.charAt(j) - '0';
res[i + j + 1] += n1i * n2j;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < res.length; i++) {
int digit = res[i] % 10;
int carry = res[i] / 10;
res[i] = digit;
if (i < res.length - 1) {
res[i + 1] += carry;
}
}
int i = res.length - 1;
while (i >= 0 && res[i] == 0) {
i--;
}
if (i == -1) {
return "0";
}
sb.append(res[i]);
for (i--; i >= 0; i--) {
sb.append(res[i]);
}
return sb.toString();
}
文章来源:https://blog.csdn.net/weixin_43400865/article/details/135197123
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!