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, 卷积, 多项式乘法, 大整数乘法

最新文章

  1. 使用mapreduce计算环比的实例
  2. TotoiseSVN的基本使用方法
  3. NC 查询公司下所分配的组织,并存放字符串数组中
  4. 不支持C++11 decltype的噩耗
  5. Linux安全之——Ubuntu的iptable命令使用
  6. effective OC2.0 52阅读笔记(一 熟悉Objective-C)
  7. |原创|unity 4.3 2D功能SpriteRenderer修改颜色的方法
  8. Python3学习(3)-高级篇
  9. 队列的图文解析 和 对应3种语言的实现(C/C++/Java)
  10. redis 非集群的主从配置及切换
  11. css3中的多列布局columns详解
  12. 自定义WPF ListBox的选中项样式
  13. P1297: [SCOI2009]迷路
  14. Android Environment 判断sd卡是否挂载 获取sd卡目录
  15. java - String 浅谈
  16. C#关闭显示屏,使显示屏处于待机状态
  17. C#实现文件批量重命名源码下载
  18. 另外一种方式装win2008r2
  19. delphi 回调函数
  20. SPOJ3267:D-query

热门文章

  1. Vue使用json-server来进行后端数据模拟
  2. python中使用空格还是使用 Tab键缩进的建议
  3. C语言实例解析精粹学习笔记——30
  4. Qt——绘图
  5. idea 普通文件夹 转换成 module
  6. Python3 函数参数
  7. 如何保证HashMap线程安全
  8. docker windows container的一些注意点
  9. PowerPC为什么会没落,我自己的反思学习总结
  10. Flexbox布局模式的理解