leetcode43. 字符串相乘 经典大数+和*

举报
兔老大 发表于 2021/04/24 01:13:39 2021/04/24
【摘要】 43. 字符串相乘 难度中等264 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 = "2", num2 = "3" 输出: "6" 示例 2: 输入: num1 = "1...

43. 字符串相乘

难度中等264

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

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理

  
  1. class Solution {
  2. /**
  3. * 计算形式
  4. * num1
  5. * x num2
  6. * ------
  7. * result
  8. */
  9. // 计算结果
  10. String res = "0";
  11. public String multiply(String num1, String num2) {
  12. if (num1.equals("0") || num2.equals("0")) {
  13. return "0";
  14. }
  15. // num2 逐位与 num1 相乘
  16. for (int i = num2.length() - 1; i >= 0; i--) {
  17. int carry = 0;
  18. // 保存 num2 第i位数字与 num1 相乘的结果
  19. StringBuilder temp = new StringBuilder();
  20. // 补 0
  21. for (int j = 0; j < num2.length() - 1 - i; j++) {
  22. temp.append(0);
  23. }
  24. int n2 = num2.charAt(i) - '0';
  25. // num2 的第 i 位数字 n2 与 num1 相乘
  26. for (int j = num1.length() - 1; j >= 0 || carry != 0; j--) {
  27. int n1 = j < 0 ? 0 : num1.charAt(j) - '0';
  28. int product = (n1 * n2 + carry) % 10;
  29. temp.append(product);
  30. carry = (n1 * n2 + carry) / 10;
  31. }
  32. // 将当前结果与新计算的结果求和作为新的结果
  33. res = addStrings(res, temp.reverse().toString());
  34. }
  35. return res;
  36. }
  37. /**
  38. * 对两个字符串数字进行相加,返回字符串形式的和
  39. */
  40. public String addStrings(String num1, String num2) {
  41. StringBuilder builder = new StringBuilder();
  42. int carry = 0;
  43. for (int i = num1.length() - 1, j = num2.length() - 1;
  44. i >= 0 || j >= 0 || carry != 0;
  45. i--, j--) {
  46. int x = i < 0 ? 0 : num1.charAt(i) - '0';
  47. int y = j < 0 ? 0 : num2.charAt(j) - '0';
  48. int sum = (x + y + carry) % 10;
  49. builder.append(sum);
  50. carry = (x + y + carry) / 10;
  51. }
  52. return builder.reverse().toString();
  53. }
  54. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/104367671

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。