字符串相乘(大数相乘)
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;}
};
字符串相乘(大数相乘)相关推荐
- 【LeetCode43:字符串相乘(大数相乘)(Java实现)】
字符串相乘(大数相乘) 一.题目描述 1.题目内容 2.样例 二.解决方案 1.算法流程 1)分析(竖式计算) 2)算法流程 2.Java实现 1)核心代码 2)完整测试代码 一.题目描述 1.题目内 ...
- python 字符串相乘(大数相乘)
python 字符串相乘(大数相乘) 来自力扣43题,题目如下. 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式.示例 ...
- 大数相乘、大数相加、大数相减Java版本
为什么80%的码农都做不了架构师?>>> 题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...
- C#中关于处理两个大数相乘的问题
方法一:直接利用.NET FrameWork 4.0中自带的System.Numeric类库 添加了对此类库的引用后,直接调用方法即可计算: View Code 1 BigInteger num1 = ...
- 大数相乘(c语言/c++)
大数相乘(c语言/c++) 方法一:做加法 方法二.做乘法 方法一:做加法 思路:模拟竖乘过程.将num2从后往前一个一个的去乘num1.然后累加.在累加的时候记得在末尾补0.补的0的个数就是第二个字 ...
- 算法题-大数相乘问题
今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积.输入的数字可能超过计算机内整形数据的存储范围. 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示 ...
- 大数相乘(数组表示)
大数相乘 首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到 ...
- 大数相乘 - 浮点数
最多支持0.04G位的大浮点数相乘算法,提供10000阶乘的例子. 昨天,噢不,今日拂晓,鸡鸣之时,写了一大整型数相乘,下午有空,改进了一下,昨天直觉说实现以上几点能提升45%今天一试,哈准.果然是4 ...
- C语言无符号双字节乘法,华为OJ机试标题:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...
华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘) 题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出 ...
- 超大数相乘的java代码,java版大数相乘
在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 用java搞了一个版本 这里说一下思路 将数字已字符串形式接收,转换成int[]整型数组,然后num1[],num2[]依次 ...
最新文章
- CodeAction_beta02 斐波那契 (多维DP)
- 蛋花花谈Web开发到底要不要加入人工智能
- 写工作总结的要领是什么?
- Windbg学习 (0x0001) 安装与基本配置
- 释放锁的逻辑-InterProcessMutex.release
- VUE全局导航守卫、 请求、响应拦截器 的设置
- java面包屑实现_在Java中实现过滤器和面包店锁
- leetcode38. 外观数列
- Python模块(1)-Argparse 简易使用教程
- Java技术知识点的一些总结
- 「Flink」使用Managed Keyed State实现计数窗口功能
- 项目管理---(1) 项目管理流程
- 花书+吴恩达深度学习(二八)深度生成模型之有向生成网络(VAE, GAN, 自回归网络)
- 【超简单已实现】CSDN实现点击跳转到指定段落
- MySQL学习记录 (五) ----- 存储函数、存储过程和触发器
- 我得到 http 响应,但 response.getEntity().getContent() 显示空指针异常
- 图像迁移风格保存模型_图像风格迁移原理
- 网店营销成为运营商营销的重要平台
- js中继承的方法总结(apply,call,prototype)
- 计算机网络没有接收什么情况,电脑网络连接失败 网卡只有发送没有接收该怎么办?...
热门文章
- 通用shellcode代码
- net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
- Cocos2D-x工程目录介绍
- ASP.NET开发,从二层至三层,至面向对象 (4)
- 本机连接虚拟机Oracle时报错的解决办法
- 18 个 jQuery Mobile 开发贴士和教程
- 深入浅出之虚函数原理篇(笔记三)
- java disjoint_java – Union Find算法的应用(Disjoint Set)
- 【数据结构与算法】之深入解析“奇怪的打印机”的求解思路与算法示例
- iOS逆向之深入解析如何Hook所有+load方法及Category的处理