Multiply Strings
2015-08-15 21:52
260 查看
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.
class Solution {
public:
string plus(string s1,string s2){
int l1=s1.size();
int l2=s2.size();
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
if(l1>=l2){
int bit=0;
string ns="";
for(int i=0;i<l2;i++){
int temp=s1[i]-'0'+s2[i]-'0';
ns+=(temp+bit)%10+'0';
if((temp+bit)>=10)
bit=1;
else
bit=0;
}
for(int j=l2;j<l1;j++){
int temp=s1[j]-'0';
ns+=(temp+bit)%10+'0';
if((temp+bit)>=10)
bit=1;
else
bit=0;
}
if(bit!=0)
ns+=bit+'0';
reverse(ns.begin(),ns.end());
return ns;
}
else
return plus(s2,s1);
}
string cut(string s){
if(s.size()==1)
return s;
if(s[0]=='0')
s=s.substr(1);
else
return s;
return cut(s);
}
string multiply(string num1, string num2){
int l1=num1.size();
int l2=num2.size();
int bit;
vector<string> svec;
int count=0;
for(int i=l2-1;i>=0;i--){
bit=0;
string ns="";
for(int j=l1-1;j>=0;j--){
int temp=(num1[j]-'0')*(num2[i]-'0');
ns+=(temp+bit)%10+'0';
bit=(temp+bit)/10;
}
if(bit!=0)
ns+=bit%10+'0';
reverse(ns.begin(),ns.end());
count++;
for(int n=1;n<count;n++)
ns+='0';
svec.push_back(ns);
}
string ns=svec[0];
for(int i=1;i<svec.size();i++){
ns=plus(svec[i],ns);
}
ns=cut(ns);
return ns;
}
};
Note: The numbers can be arbitrarily large and are non-negative.
class Solution {
public:
string plus(string s1,string s2){
int l1=s1.size();
int l2=s2.size();
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
if(l1>=l2){
int bit=0;
string ns="";
for(int i=0;i<l2;i++){
int temp=s1[i]-'0'+s2[i]-'0';
ns+=(temp+bit)%10+'0';
if((temp+bit)>=10)
bit=1;
else
bit=0;
}
for(int j=l2;j<l1;j++){
int temp=s1[j]-'0';
ns+=(temp+bit)%10+'0';
if((temp+bit)>=10)
bit=1;
else
bit=0;
}
if(bit!=0)
ns+=bit+'0';
reverse(ns.begin(),ns.end());
return ns;
}
else
return plus(s2,s1);
}
string cut(string s){
if(s.size()==1)
return s;
if(s[0]=='0')
s=s.substr(1);
else
return s;
return cut(s);
}
string multiply(string num1, string num2){
int l1=num1.size();
int l2=num2.size();
int bit;
vector<string> svec;
int count=0;
for(int i=l2-1;i>=0;i--){
bit=0;
string ns="";
for(int j=l1-1;j>=0;j--){
int temp=(num1[j]-'0')*(num2[i]-'0');
ns+=(temp+bit)%10+'0';
bit=(temp+bit)/10;
}
if(bit!=0)
ns+=bit%10+'0';
reverse(ns.begin(),ns.end());
count++;
for(int n=1;n<count;n++)
ns+='0';
svec.push_back(ns);
}
string ns=svec[0];
for(int i=1;i<svec.size();i++){
ns=plus(svec[i],ns);
}
ns=cut(ns);
return ns;
}
};
相关文章推荐
- Android学习笔记(五)
- 老东西翻出来学习学习 BGP hijacking
- GDOI2016模拟8.15安全监控
- angularjs install for window
- Unity3D:Graphics.BlitMultiTap方法
- vim搭建笔记
- ZOJ3279 ants
- 一行代码,阻止浏览器自动填充密码
- stm32 f1和f4的比较
- Java_Web开发之绝对路径与相对路径(学习笔记)
- Java中throw和throws的区别
- ZOJ3279 ants
- 编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变
- HDU 1078 FatMouse and Cheese
- SSH反向连接及Autossh
- [bzoj2038 [2009国家集训队]小Z的袜子(hose)] 莫队算法
- Codeforces Gym 100203I I WIN 最大流
- HTML学习笔记
- 巧妙的邻接表『转载自啊哈磊』
- 在树莓派上安装opencv