算法问题

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

算法实现

以下是大神的算法,膜拜大神

首先,长度位m的数乘以长度为n的数的结果不超过m+n。

接下来,我们来看下两数相乘的计算过程,从右向左,将数2中的每一位的数与数1相乘,最后将结果相加。下图演示的是两数相乘的整个过程,从下图中,我们可以得到,对于num[i] *num[j](数1中的第i位数字与数2中的第j位数字相乘的结果只会存放在第【i+j】和【i+j+1】这两位上)

因此,我们实现算法如下:

  public static String multiply(String num1, String num2) {int m = num1.length(), n = num2.length();int[] pos = new int[m + n];for (int i = m - 1; i >= 0; i--) {for (int j = n - 1; j >= 0; j--) {int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');int p1 = i + j, p2 = i + j + 1;int sum = mul + pos[p2];pos[p1] += sum / 10;pos[p2] = (sum) % 10;}}StringBuilder sb = new StringBuilder();for (int p : pos) {if (!(sb.length() == 0 && p == 0)) {sb.append(p);}}return sb.length() == 0 ? "0" : sb.toString();}

另外,常见的大数相乘算法还有:

  • Karatsuba算法
  • FFT快速傅里叶变换算法

LeetCode-Problem 43:大数相乘相关推荐

  1. leetcode -43 -字符串相乘 -java版

    文章目录 题目 代码 题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = &quo ...

  2. LeetCode 43. 字符串相乘【c++/java详细题解】

    目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. ...

  3. 【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]

    刷题打卡,第 二十四 天 题目一.43. 字符串相乘 题目二.1800. 最大升序子数组和 题目一.43. 字符串相乘 原题链接:43. 字符串相乘 题目描述: 给定两个以字符串形式表示的非负整数 n ...

  4. C#中关于处理两个大数相乘的问题

    方法一:直接利用.NET FrameWork 4.0中自带的System.Numeric类库 添加了对此类库的引用后,直接调用方法即可计算: View Code 1 BigInteger num1 = ...

  5. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: 1 import java. ...

  6. python中字符串相乘结果_LeetCode 43. 字符串相乘 | Python

    43. 字符串相乘 题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1:输入: num1 = " ...

  7. C语言无符号双字节乘法,华为OJ机试标题:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...

    华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘) 题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出 ...

  8. 超大数相乘的java代码,java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 用java搞了一个版本 这里说一下思路 将数字已字符串形式接收,转换成int[]整型数组,然后num1[],num2[]依次 ...

  9. 【LeetCode43:字符串相乘(大数相乘)(Java实现)】

    字符串相乘(大数相乘) 一.题目描述 1.题目内容 2.样例 二.解决方案 1.算法流程 1)分析(竖式计算) 2)算法流程 2.Java实现 1)核心代码 2)完整测试代码 一.题目描述 1.题目内 ...

最新文章

  1. 在Windows和Linux上编译gRPC源码操作步骤(C++)
  2. 职校中的计算机学的是什么,职校计算机专业主要学什么课
  3. [LUOGU] 1090 合并果子
  4. TransmittableThreadLocal 解决 线程池线程复用 无法复制 InheritableThreadLocal 的问题
  5. 工业交换机品牌选择时注意的事项介绍
  6. 自动驾驶路径规划论文解析(6)
  7. 瞧一瞧,看一看,微信应用号(小程序)
  8. FAT32,EXFAT,FAT16和FAT12的所有信息
  9. 大数据改变中国交通浙江用阿里云看未来
  10. 对象流--对象的序列化
  11. HDU2201 熊猫阿波的故事【概率】
  12. linux内存管理_架构师必读:Linux 的内存分页管理
  13. 图纸怎么折?(A0,A1,A2,A3の图纸如何折成A4大小)
  14. [BZOJ4134][JZOJ4401]ljw和lzr的hack比赛
  15. H5+ API 设置手机状态栏颜色以及沉浸式状态栏
  16. 【第54题】输入、输出系列2-批量重命名,批量移动文件,批量删除tmp文件
  17. OmniGraffle 制作表格 调整对象
  18. 云顶之奕pbe服务器注册,云顶之弈手游pbe服
  19. [转载]通过 call gate 访问目标 code segment
  20. 矩阵对角线求和C++

热门文章

  1. 还好我们有朋友-蝌蚪
  2. 封装Form表单正则校验--确认密码正则表达式
  3. 简洁是智慧的灵魂,冗长是肤浅的藻饰
  4. 面试连环问之Redis分布式锁
  5. 快慢指针追逐法寻找单链表中环的起点
  6. matlab做神经网络的步骤,用matlab实现神经网络
  7. ubuntu虚拟机黑屏解决方案
  8. 什么是DOM及DOM操作?
  9. 国际顶级域名后缀含义大全
  10. 互联网公司校招Java面试题总结及答案——网易