当前位置:网站首页>2022.07.15_每日一题
2022.07.15_每日一题
2022-07-31 06:07:00 【诺.い】
43. 字符串相乘
题目描述
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: "6“
示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”
提示:
1 <= num1.length, num2.length <= 200
num1
和num2
只能由数字组成。num1
和num2
都不包含任何前导零,除了数字0本身。
- 数学
- 字符串
- 模拟
coding
class Solution {
public String multiply(String num1, String num2) {
// 会超范围
// Integer n1 = Integer.valueOf(num1);
// Integer n2 = Integer.valueOf(num2);
// return n1 * n2 + "";
// BigDecimal yyds!! 哈哈哈
// BigDecimal s1 = new BigDecimal(num1);
// BigDecimal s2 = new BigDecimal(num2);
// return s1.multiply(s2).toString();
// 模拟
// 如果其中一个数是 "0", 则结果必定为 "0"
if (num1.equals("0") || num2.equals("0")) {
return "0";
}
String res = "";
Stack<String> stack = new Stack();
int temp = 0;
for (int i = num1.length() - 1; i >= 0; i--) {
for (int j = num2.length() - 1; j >= 0; j--) {
stack.add(String.valueOf((Integer.parseInt(num1.substring(i, i + 1)) * Integer.parseInt(num2.substring(j, j + 1)) + temp) % 10));
temp = (Integer.parseInt(num1.substring(i, i + 1)) * Integer.parseInt(num2.substring(j, j + 1)) + temp) / 10;
}
if (temp != 0) {
stack.add(String.valueOf(temp));
temp = 0;
}
StringBuffer str = new StringBuffer(stack.size());
while (!stack.isEmpty()) {
str.append(stack.pop());
}
int zeroCnt = num1.length() - 1 - i;
while (zeroCnt > 0) {
str.append('0');
zeroCnt --;
}
res = addStr(res, str.toString());
}
return res;
}
private String addStr(String str1, String str2) {
StringBuffer sum = new StringBuffer();
int temp = 0;
Stack<String> stack = new Stack();
int index1 = str1.length() - 1;
int index2 = str2.length() - 1;
while (index1 >= 0 || index2 >= 0) {
int num1 = 0;
int num2 = 0;
if (index1 >= 0) {
num1 = Integer.parseInt(str1.substring(index1, index1 + 1));
}
if (index2 >= 0) {
num2 = Integer.parseInt(str2.substring(index2, index2 + 1));
}
stack.add(String.valueOf((num1 + num2 + temp) % 10));
temp = (num1 + num2 + temp) / 10;
index1 --;
index2 --;
}
if (temp != 0) {
stack.add(String.valueOf(temp));
}
while (!stack.isEmpty()) {
sum.append(stack.pop());
}
return sum.toString();
}
}
边栏推荐
- 【面试:并发篇38:多线程:线程池】ThreadPoolExecutor类的基本概念
- 【TA-霜狼_may-《百人计划》】美术2.3 硬表面基础
- 小实战项目之——吃货联盟订餐系统
- 服务器和客户端信息的获取
- 【Go语言刷题篇】Go完结篇函数、结构体、接口、错误入门学习
- 第十七章:回溯探求指定入口的马步遍历,贪心无回溯探求马步遍历,递归探求nxm棋盘带障碍马步遍历
- Some derivation formulas for machine learning backpropagation
- 电压源的电路分析知识分享
- 科普 | “大姨太”ETH 和 “小姨太”ETC的爱恨情仇
- 【云原生】3.3 Kubernetes 中间件部署实战
猜你喜欢
随机推荐
项目 - 如何根据最近30天、最近14天、最近7天、最近24小时、自定义时间范围查询MySQL中的数据?
HighTec 的安装与配置
DirectExchange交换机简单入门demo
【Go语言入门】一文搞懂Go语言的最新依赖管理:go mod的使用
【并发编程】ReentrantLock的lock()方法源码分析
Markdown中的数学符号
那些破釜沉舟入局Web3.0的互联网精英都怎么样了?
04-SDRAM: Read Operation (Burst)
Database Principles Homework 2 — JMU
postgresql源码学习(33)—— 事务日志⑨ - 从insert记录看日志写入整体流程
解决安装 Bun 之后出现 zsh compinit: insecure directories, run compaudit for list. Ignore insecure directorie
【愚公系列】2022年07月 Go教学课程 022-Go容器之字典
芯塔电子斩获第十一届中国双创大赛芜湖赛区桂冠
文件 - 05 下载文件:根据文件Id下载文件
SQLite数据库连接字符串
Some derivation formulas for machine learning backpropagation
强化学习科研知识必备(数据库、期刊、会议、牛人)
Moment.js common methods
【解决】mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
深度学习通信领域相关经典论文、数据集整理分享