概述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

输入: num1 = “2”, num2 = “3”
输出: “6”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

常规思路: 1234 * 456 = 1234 * 6 + 1234 * 50 + 1234 * 400

由于 0 乘以任何数都是 0,所以 1234 * 50 = 1234 * 5 的结果加上一个 0,1234 * 400 的结果等于 1234 * 4 的结果结尾加上两个 0;

其次将计算结果相加,又用到了字符串的加法实现;字符串的加法实现也是类似,从末位开始相加,超过 10 就进位。

实现

class Solution {public String multiply(String num1, String num2) {if ("0".equals(num1) || "0".equals(num2)){return "0";}int count = 0; // 表示第几次循环,用于字符串结尾加 0 String answer = "0"; for (int i = num2.length() - 1; i >= 0 ; i--) {  // 从 num2 的末尾开始,与 num1 的各个位相乘char tempNum2 = num2.charAt(i);int jinwei = 0;  // 进位StringBuilder stringBuilder = new StringBuilder();int tempNum2Int = tempNum2 - '0';  for (int j = num1.length() - 1; j >= 0 ; j--) {  // 将 num1 的各位与 num2 的当前字符相乘int tempNum1Int = num1.charAt(j) - '0';int result = tempNum2Int * tempNum1Int + jinwei;  // stringBuilder.append(result % 10);jinwei = result / 10;}if (jinwei > 0){stringBuilder.append(jinwei);}stringBuilder = stringBuilder.reverse();// 结尾加 0 for (int j = 0; j < count; j++) {stringBuilder.append("0");}count++;// 大整数加法answer = stringAdd(answer,stringBuilder.toString());}return answer;}/*** 大整数加法* @param str1* @param str2* @return*/public String stringAdd(String str1, String str2){int num1Length = str1.length();int num2Length = str2.length();int maxLength = Math.max(num1Length,num2Length);// 少位的补 0 对齐if (num1Length < num2Length){for (int i = 0; i < num2Length-num1Length; i++) {str1 = '0' + str1;}}if (num1Length > num2Length){for (int i = 0; i < num1Length-num2Length; i++) {str2 = '0' + str2;}}StringBuilder stringBuilder = new StringBuilder();int jinwei = 0;for (int j = maxLength - 1;j >= 0 ;j--){int num1 = str1.charAt(j) - '0';int num2 = str2.charAt(j) - '0';int ans = num1 + num2 + jinwei;jinwei = ans / 10;stringBuilder.append(ans % 10);}// 有进位if (jinwei > 0){stringBuilder.append(jinwei);}return stringBuilder.reverse().toString();}
}

总结

其实就是考察移位运算的熟练程度,穿插了字符串加法的实现。

LeetCode 字符串加法

字符串相乘——大整数乘法相关推荐

  1. 大整数乘法(Karatsuba算法的字符串形式的C++实现)

    #include <iostream> #include <sstream> #include <cstring> using namespace std;/函数声 ...

  2. python两数相乘代码_Python 实现大整数乘法算法的示例代码

    我们平时接触的长乘法,按位相乘,是一种时间复杂度为 O(n ^ 2) 的算法.今天,我们来介绍一种时间复杂度为 O (n ^ log 3) 的大整数乘法(log 表示以 2 为底的对数). 介绍原理 ...

  3. 大整数乘法c语言代码_大整数乘法

    大整数乘法和我们小学学过的乘法公式一样(如下图),就是按位相乘,两个数中的每一位彼此相乘,然后将相同列的结果加起来,最后统一处理进位即可. #include <iostream> #inc ...

  4. 信息学奥赛一本通(1174:大整数乘法)

    1174:大整数乘法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12480     通过数: 7002 [题目描述] 求两个不超过200位的非负整数的积. [ ...

  5. 计算机算法设计与分析 大整数乘法

    大整数乘法 问题描述 求两个不超过200位的非负整数的积. 输入形式 有两行,每行是一个不超过200位的非负整数,没有多余的前导0. 输出形式 一行,即相乘后的结果.结果里不能有多余的前导0,即如果结 ...

  6. 分治法实验之大整数乘法(算法设计分析)

    分治法实验之大整数乘法 01. 问题描述 02. 输入格式 03. 输出格式 04. 输入样例 05. 输出样例 06. 问题分析 07. 算法设计 08. 代码实现 09. 测试结果 10. 复杂度 ...

  7. 大整数乘法(递归+分治法)

    目录 一.问题描述 二.思路分析 分治法介绍: 问题分析: 三.算法伪代码 四.代码实现效果 五.源代码 六.参考文章 一.问题描述 请设计一个有效的算法,可以进行两个n位大整数的乘法.(n=2^k, ...

  8. 分治算法经典问题---大整数乘法(1~32位大整数乘法)C++

    大整数乘法 大整数乘法(1~32位大整数乘法) 分治的思想 实验题目及要求(大整数乘法) 算法分析(result=m4*10^2^+(m2+m3)*10^n/2^+m1) 算法分析 代码 源文件 ma ...

  9. 大数乘法python_大整数乘法python3实现

    由于python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,但是思想是一样的.利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位 ...

最新文章

  1. S2-045漏洞利用工具解决方案
  2. linux top 命令信息解释
  3. 突发信号matlab,MATLAB信号处理仿真
  4. 线程同步之——互斥量及死锁问题
  5. 【USACO 3.1】Contact(01子串按出现次数排序)
  6. python找与7相关的数字_C++和python实现阿姆斯特朗数字查找实例代码
  7. python idle 清屏问题的解决
  8. linux配置libpng环境变量_不同操作系统下 jdk 的配置
  9. TF-Lite极简参考-环境搭建
  10. 如何保持交互的可见性
  11. php获取qq头像地址,使用PHP语言通过邮箱获取全球公认的Gravatar头像地址
  12. HTML/CSS 长度单位 px和pt的区别
  13. 期刊评价查询+机器人领域期刊排名
  14. vivoX9手机拆解
  15. 推挽变换器漏感电压尖峰
  16. js验证身份证合法性(最后一位的校验)
  17. Ti 949 配置 948 i2c
  18. 利用定时器实现倒计时
  19. 最新史上最权威的Oracle学习路线视频教程(价值2w)
  20. 第二章大数据技术概述

热门文章

  1. video-play使用,vue2
  2. dij最短路+堆优化
  3. ST_Geometry 的关系函数
  4. 在自己的数据集上训练CrowdDet过程记录
  5. mysql隔离级别到底是什么
  6. db2 如何 将 oracle CONNECT BY 移植到 DB2
  7. 曼哈顿距离,欧式距离,明式距离,切比雪夫距离区别
  8. ext2和ext3的主要区别
  9. 【时间复杂度】时间复杂度
  10. c语言里编译错误c131,C语言习题选择题.doc