1、思路(字符串模拟) O(n*m)

一、普通竖式

以num1 = 123 , num2 = 456为例:我们遍历 num2 每一位与 num1 进行相乘,将每一步的结果进行累加,在这个过程如果相乘或者相加的结果大于等于10 ,我们都要去满10进位,如下图所示:

这样模拟普通竖式计算的方法较为复杂,我们可以考虑优化版的竖式计算。

二、优化竖式

其实在相乘或者相加计算过程的每一位,我们可以考虑先不去满10进位,等到计算完所有的相乘结果以后,最终将其加到一块,再去满10进位 ,最后的结果和普通竖式 一样,但却可以大大简化我们的模拟过程。(如下图所示)

class Solution {public:string multiply(string num1, string num2) {vector<int> A,B;int n=num1.size();int m=num2.size();vector<int> C(n+m);for(int ii=n-1;ii>=0;ii--) A.push_back(num1[ii]-'0');//-'0'把字符变成数字for(int ii=m-1;ii>=0;ii--) B.push_back(num2[ii]-'0');for(int ii=0;ii<A.size();ii++){for(int jj=0;jj<B.size();jj++){C[ii+jj]+=A[ii]*B[jj];}}int t=0;//存储进位for(int ii=0;ii<C.size();ii++){t+=C[ii];//为了利用上上面那个进位C[ii]=t%10;//进位操作的固定写法,先t%10取个位,然后再t/10进位t/=10;}int kk=C.size()-1;while(kk>0&&!C[kk]) kk--;//去除前导0 比如此例 "2" "3"->"06"string res;for(;kk>=0;kk--){res+=C[kk]+'0';//+'0'把数字变成字符}return res;}
};

字符串相乘(大数相乘)相关推荐

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

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

  2. python 字符串相乘(大数相乘)

    python 字符串相乘(大数相乘) 来自力扣43题,题目如下. 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式.示例 ...

  3. 大数相乘、大数相加、大数相减Java版本

    为什么80%的码农都做不了架构师?>>>    题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...

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

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

  5. 大数相乘(c语言/c++)

    大数相乘(c语言/c++) 方法一:做加法 方法二.做乘法 方法一:做加法 思路:模拟竖乘过程.将num2从后往前一个一个的去乘num1.然后累加.在累加的时候记得在末尾补0.补的0的个数就是第二个字 ...

  6. 算法题-大数相乘问题

    今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积.输入的数字可能超过计算机内整形数据的存储范围. 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示 ...

  7. 大数相乘(数组表示)

    大数相乘 首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到 ...

  8. 大数相乘 - 浮点数

    最多支持0.04G位的大浮点数相乘算法,提供10000阶乘的例子. 昨天,噢不,今日拂晓,鸡鸣之时,写了一大整型数相乘,下午有空,改进了一下,昨天直觉说实现以上几点能提升45%今天一试,哈准.果然是4 ...

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

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

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

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

最新文章

  1. CodeAction_beta02 斐波那契 (多维DP)
  2. 蛋花花谈Web开发到底要不要加入人工智能
  3. 写工作总结的要领是什么?
  4. Windbg学习 (0x0001) 安装与基本配置
  5. 释放锁的逻辑-InterProcessMutex.release
  6. VUE全局导航守卫、 请求、响应拦截器 的设置
  7. java面包屑实现_在Java中实现过滤器和面包店锁
  8. leetcode38. 外观数列
  9. Python模块(1)-Argparse 简易使用教程
  10. Java技术知识点的一些总结
  11. 「Flink」使用Managed Keyed State实现计数窗口功能
  12. 项目管理---(1) 项目管理流程
  13. 花书+吴恩达深度学习(二八)深度生成模型之有向生成网络(VAE, GAN, 自回归网络)
  14. 【超简单已实现】CSDN实现点击跳转到指定段落
  15. MySQL学习记录 (五) ----- 存储函数、存储过程和触发器
  16. 我得到 http 响应,但 response.getEntity().getContent() 显示空指针异常
  17. 图像迁移风格保存模型_图像风格迁移原理
  18. 网店营销成为运营商营销的重要平台
  19. js中继承的方法总结(apply,call,prototype)
  20. 计算机网络没有接收什么情况,电脑网络连接失败 网卡只有发送没有接收该怎么办?...

热门文章

  1. 通用shellcode代码
  2. net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
  3. Cocos2D-x工程目录介绍
  4. ASP.NET开发,从二层至三层,至面向对象 (4)
  5. 本机连接虚拟机Oracle时报错的解决办法
  6. 18 个 jQuery Mobile 开发贴士和教程
  7. 深入浅出之虚函数原理篇(笔记三)
  8. java disjoint_java – Union Find算法的应用(Disjoint Set)
  9. 【数据结构与算法】之深入解析“奇怪的打印机”的求解思路与算法示例
  10. iOS逆向之深入解析如何Hook所有+load方法及Category的处理