Multiply Strings
来源:互联网 发布:mysql 最多从库 编辑:程序博客网 时间:2024/06/18 15:11
算法题目: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.
大致意思:给定两个字符串数字num1,num2,数字可以无限大且非负,求这两个字符数的乘积,以string类型返回
解题思路:用一个长度为num1.size()+num2.size()的字符串ret保存结果,用一个carry数据记录各位上的进位,其长度为两个字符串数的长度和,且初始化为0,对应num1中的第i位上的数和num2上的第j 位数的乘积保存在ret的第i+j位上,最后对进位进行处理。
string multiply(string num1, string num2) { if(num1.size()==0||num2.size()==0)return ""; else if(num1=="0"||num2=="0")return "0"; string ret(num1.size()+num2.size()-1,'0'); vector<int> carry(num1.size()+num2.size(),0); for(int i=0;i<num1.size();i++) { for(int j=0;j<num2.size();j++) { int sum=(num1[i]-'0')*(num2[j]-'0')+ret[i+j]-'0'; ret[i+j]=sum%10+'0'; carry[i+j]+=sum/10; } } for(int i=ret.size()-1;i>=0;i--) { int sum=ret[i]-'0'+carry[i+1]; ret[i]=sum%10+'0'; carry[i]+=sum/10; } return carry[0]>0?string(1,'0'+carry[0])+ret:ret; }
另外一种思路,根据乘法运算的步骤做的,计算量较大:
string AddCore(string& s1,string& s2,int c) { if(s1.size()==0&&s2.size()==0&&c==0)return ""; int ca=0,cb=0; string subs1=""; string subs2=""; if(s1.size()!=0) { subs1=s1.substr(0,s1.size()-1); ca=s1[s1.size()-1]-'0'; } if(s2.size()!=0) { subs2=s2.substr(0,s2.size()-1); cb=s2[s2.size()-1]-'0'; } int m=(ca+cb+c)%10; c=(ca+cb+c)/10; return AddCore(subs1,subs2,c)+string(1,m+'0'); } string StringAdd(string& s1,string& s2) { return AddCore(s1,s2,0); } string multiply(string num1, string num2) { if(num1.size()==0||num2.size()==0)return ""; else if(num1=="0"||num2=="0")return "0"; string ret=""; int zeronum=0; for(int i=num2.size()-1;i>=0;i--,zeronum++) { string s(num1.size(),'0'); int k=num2[i]-'0'; int c=0; for(int j=num1.size()-1;j>=0;j--) { int sum=(num1[j]-'0')*k+c; c=sum/10; s[j]=sum%10+'0'; } if(c>0)s=string(1,'0'+c)+s; for(int j=0;j<zeronum;j++) { s+='0'; } ret=StringAdd(s,ret); } return ret; }
0 0
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- 指针自加问题
- Xcode Cocoa程序MessageBox 弹框
- 一些学习前端的网站(html&css&javascript等)持续更新。。。
- cocos2dx-3.3 使用编辑框(EditBox)
- 安卓广播BroadcastReceiver
- Multiply Strings
- UIWebView和Js交互
- FusionCharts的使用方法
- NASM Intro - Compile and Link
- iOS开发网络数据之AFNetworking使用
- 搞定:找不到该项目,请确认该项目的位置的办法
- link2SD的原理以及开启方法
- 有道词典的简单实现
- 【机房收费系统】连接数据库操作