概述

给定两个以字符串形式表示的非负整数 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. 都是程序员,凭什么他能站在鄙视链的顶端?
  2. mysql 差异还原_MySQL差异转储? 还原的其他策略?
  3. 这届全明星,把NBA又燃回来了
  4. 那些女程序员们的故事
  5. UIWebView捕获内部web点击事件
  6. 软件行业做了3年,何去何从?到底该搞哪个方面?迷茫+努力
  7. Azure 网站上的 Java
  8. java前端学习路线_Java前端需要学什么?Java前端学习路线分享
  9. 易语言取linux命令返回值,易语言返回命令使用讲解
  10. WinRAR 32位解压缩软件 v5.21 汉化免费版
  11. 计算机视觉-1.2手写字体识别
  12. threejs写的模仿微信跳一跳游戏
  13. JavaScript程序设计(笔记1)
  14. PubWin服务器同步时间
  15. GO语言-数据结构-栈
  16. 豆瓣评论数据词云画像()
  17. 计算机房的网络化管理,学校计算机房的设计与管理
  18. 简单易学的机器学习算法——梯度提升决策树GBDT
  19. 互联网、因特网以及万维网之间的区别和联系
  20. http://www.dewen.net.cn/q/15051/C++ 整形和浮点数相除的精度问题

热门文章

  1. java 线性回归_Java线性回归
  2. COMSOL 专题学习
  3. Linux内核全版本下载地址
  4. jsp中文传值到java乱码_jsp传递参数中文乱码解决办法
  5. 《面朝大海,春暖花开》——海子
  6. bismark 识别甲基化位点-比对篇
  7. 业务设计师(产品经理)P级晋升必备职能(P3-P7)
  8. mysql 不重复_Mysql 查询不重复数据
  9. cocos2d-x初探学习笔记(29)-cocosBuilder
  10. 钰泰ETA2821,42V/1.5A降压转换器,集成OVP功能防浪涌