[Leetcode] Multiply strings 字符串对应数字相乘
2024-09-25 01:29:28
Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
题意:计算字符串对应数字的乘积。参考JustDoIT的博客。
思路:先用一维向量存放计算的中间值,中间值存放对应位置乘积的和(暂不考虑进位的情况);然后针对进位的情况,进行计算;注意要跳过开始为0的情况(因为向量开始全部初始为0);然后将数字转化为字符串。以234*156为例:
1 class Solution {
public:
string multiply(string num1, string num2)
{
int len1=num1.size();
int len2=num2.size();
vector<int> midVal(len1+len2,); int k=len1+len2-;
for(int i=;i<len1;++i)
for(int j=;j<len2;++j)
{
midVal[k-i-j]+=(num1[i]-'')*(num2[j]-''); //从右向左
} int carry=; //进位
for(int i=;i<len1+len2;++i)
{
midVal[i]+=carry;
carry=midVal[i]/;
midVal[i]%=;
} int i=len1+len2-;
while(midVal[i]==) //去除向量中最开始的0
i--; if(i<) return ""; //全部为0时 //将值变成字符串
string res;
for(;i>=;--i)
res.push_back(midVal[i]+''); return res; }
};
另外更高效的计算大整数乘法一般有:(1)karatsuba算法,复杂度为3nlog3≈3n1.585,可以参考百度百科、乘法算法-Karatsuba算法。(2)基于FFT(快速傅里叶变换)的算法,复杂度为o(nlogn), 可以参考FFT, 卷积, 多项式乘法, 大整数乘法
最新文章
- 使用mapreduce计算环比的实例
- TotoiseSVN的基本使用方法
- NC 查询公司下所分配的组织,并存放字符串数组中
- 不支持C++11 decltype的噩耗
- Linux安全之——Ubuntu的iptable命令使用
- effective OC2.0 52阅读笔记(一 熟悉Objective-C)
- |原创|unity 4.3 2D功能SpriteRenderer修改颜色的方法
- Python3学习(3)-高级篇
- 队列的图文解析 和 对应3种语言的实现(C/C++/Java)
- redis 非集群的主从配置及切换
- css3中的多列布局columns详解
- 自定义WPF ListBox的选中项样式
- P1297: [SCOI2009]迷路
- Android Environment 判断sd卡是否挂载 获取sd卡目录
- java - String 浅谈
- C#关闭显示屏,使显示屏处于待机状态
- C#实现文件批量重命名源码下载
- 另外一种方式装win2008r2
- delphi 回调函数
- SPOJ3267:D-query