java - 在不使用 Big-Integer 库的情况下将大字符串数相乘
问题描述
我编写了一个简单的解决方案,它将以字符串形式给出的 2 个整数相乘并将乘积作为字符串返回。但它不适用于大值,我不允许使用 Big-Integer 库。
这是我目前的解决方案。
class Solution {
public String multiply(String num1, String num2) {
int numOne = 0;
int numTwo = 0;
for(char c : num1.toCharArray()){
if((int)(c-'0') >= 0 && (int)(c-'0') <= 9){
numOne = numOne*10 + (int)(c-'0');
}
}
for(char c : num2.toCharArray()){
if((int)(c-'0') >= 0 && (int)(c-'0') <= 9){
numTwo = numTwo*10 + (int)(c-'0');
}
}
return numOne*numTwo + "";
}
}
我在以下测试用例中遇到错误:
Input:
"123456789"
"987654321"
Output:
"-67153019"
Expected:
"121932631112635269"
我应该进行哪些更改才能使大数也相乘?
解决方案
为此,您可以参考 Karatsuba 乘法算法。
你也可以这样做。
- 如果任何数字为负数,则从子字符串 1 到 n。
- 从第二个数字的最后一位开始。
- 将它与第一个数字相乘。存储结果。
- 对第二个数字的所有数字执行此操作,并继续将上一步的结果添加到当前步骤,并在位置上移动第 i 个。
互联网上也有此解决方案的示例。你会找到它的。
推荐阅读
- hdfs - 如何删除与 HDFS 中特定文件内容匹配的所有文件?
- java - 尝试访问 OpenShift 容器中的服务器时,Java Tomcat Jersey 服务器和客户端出现 403 错误,但可以在 localhost 上运行
- android-studio - VirtualView 节点不能是根节点
- r - 如何使用“textmineR”包将通过 R 中的 LDA 重试的主题分配给特定文档
- javascript - Vue.js:EventBus 被多次调用
- java - 我正在使用片段添加带有 viewPager 的选项卡布局。该选项卡是动态的,0 选项卡被禁用,1 选项卡被启用
- swift - 无法在 Xcode 11 中为 13 之前的版本添加 iOS 支持
- docker - 安装路径时 Docker 容器运行立即退出
- asp.net-core - “功能文件夹/切片”Aspnet Core 中的 Javascript 文件
- android - 创建帐户后 Flutter 和 Firebase 自动登录