首页 > 代码库 > Multiply Strings(字符串乘法模拟,包含了加法模拟)
Multiply Strings(字符串乘法模拟,包含了加法模拟)
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 {private: vector<string> tempStrs;public: string add(string num1,string num2) { int n1=num1.size(); int n2=num2.size(); int i=n1-1;int j=n2-1; string resStr; int jinwei=0; while (i>=0&&j>=0) { int temp=(num1[i]-‘0‘)+(num2[j]-‘0‘)+jinwei; jinwei=temp>=10?1:0; temp%=10; resStr.push_back(temp+‘0‘); --i; --j; } if(i>=0){ while (i>=0) { int temp=(num1[i]-‘0‘)+jinwei; jinwei=temp>=10?1:0; temp%=10; resStr.push_back(temp+‘0‘); --i; } } else if(j>=0){ while (j>=0) { int temp=(num2[j]-‘0‘)+jinwei; jinwei=temp>=10?1:0; temp%=10; resStr.push_back(temp+‘0‘); --j; } } if(jinwei!=0){ resStr.push_back(jinwei+‘0‘); } reverse(resStr.begin(),resStr.end()); return resStr; } string multiply(string num1, string num2) { if(num1.empty()||num2.empty()) return ""; if(num1=="0"||num2=="0") return "0"; int jinwei=0; int n1=num1.size(); int n2=num2.size(); if(n2>n1){ string temp=num1; num1=num2; num2=temp; n1=num1.size(); n2=num2.size(); } int time=0; string tempStr; string res; for(int i=n2-1;i>=0;--i) { tempStr.clear(); jinwei=0; for(int j=n1-1;j>=0;--j) { int temp=(num1[j]-‘0‘)*(num2[i]-‘0‘)+jinwei; jinwei=temp>=10?(temp/10):0; temp=temp%10; tempStr.push_back(temp+‘0‘); } if(jinwei!=0){ tempStr.push_back(jinwei+‘0‘); } reverse(tempStr.begin(),tempStr.end()); for(int q=0;q<time;++q){ tempStr.push_back(‘0‘); } tempStrs.push_back(tempStr); ++time; } if(tempStrs.size()>1){ res=add(tempStrs[0],tempStrs[1]); for (int i=2;i<tempStrs.size();++i) { res=add(res,tempStrs[i]); } return res; }else { return tempStrs[0]; } }};
Multiply Strings(字符串乘法模拟,包含了加法模拟)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。