leetcode43. 字串相乘
阿新 • • 發佈:2020-10-31
class Solution { public: int n; vector<int> a,b,l; vector<vector<int> > res; vector<vector<int> > qwe; int num[10]; int o; string multiply(string num1, string num2) { if(num1=="0"||num2=="0"){ return "0"; } int i,k,j,tmp,ss,t; a.clear(); b.clear(); l.clear(); n=max(num1.length(),num2.length()); for(i=0;i<10;i++){ num[i]=false; } for(i=0;i<num1.length();i++){ a.push_back(num1[num1.length()-1-i]-'0'); num[num1[num1.length()-1-i]-'0']=true; } for(i=0;i<num2.length();i++){ b.push_back(num2[num2.length()-1-i]-'0'); //num[num2[num2.length()-1-i]-'0']=true; } for(i=0;i<10;i++){ l.clear(); if(num[i]){ o=0; //cout<<i<<":"; for(j=0;j<b.size();j++){ tmp=i*b[j]+o; t=tmp/10; l.push_back(tmp%10); //cout<<tmp%10; o=t; } if(o!=0){ l.push_back(o); //cout<<o; } //cout<<endl; } qwe.push_back(l); l.clear(); } /* for(i=0;i<n;i++){ t=0; o=0; for(j=0;j<n;j++){ tmp=a[i]*b[j]+o; t=tmp/10; l.push_back(tmp%10); //cout<<tmp%10; o=t; } if(o!=0){ l.push_back(o); //cout<<o; } res.push_back(l); //cout<<endl; l.clear(); } */ ss=0; t=0; for(i=0;i<2*n;i++){//答案的第i位 ss=0; for(j=0;j<a.size();j++){//第j行 if(i-j<qwe[a[j]].size()&&a[j]!=0){ ss+=qwe[a[j]][i-j]; } } ss+=t; t=ss/10; /*if(ss==0&&i>2*n){ break; }*/ l.push_back(ss%10); }cout<<endl<<endl<<"result:"; string lll=""; while(l[l.size()-1]==0){ l.pop_back(); } for(i=0;i<l.size();i++){ cout<<l[l.size()-i-1]; lll+=l[l.size()-i-1]+'0'; } return lll; } };