1. 程式人生 > 實用技巧 >leetcode43. 字串相乘

leetcode43. 字串相乘


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;
    }
};