LeetCode-Multiply Strings-字符串乘法-大整数-字符串操作

https://oj.leetcode.com/problems/multiply-strings/

实现两个函数:

1)字符与一个串的乘法。

2)两个串的加法。

再考虑一些边界情况即可。

class Solution {
public:
	int n,m;
	string Mul(char ch,string &s){
		int up=0;
		int ich=ch-'0';
		string res;
		for (int i=0;i<n;i++){
			int ia=s[i]-'0';
			int cur=ia*ich + up;
			up=cur/10;
			cur=cur%10;
			res.push_back('0'+cur);
		}
		if (up) res.push_back('0'+up);
		return res;
	}
	string Add(string &c,string &r,int p){
		string res;
		int up=0;
		for (int i=0;i<max(c.length(),r.length()+p);i++){
			char a,b;
			if (i>=c.length()) a='0';
			else a=c[i];
			if (i<p || i>=(r.length()+p)) b='0';
			else b=r[i-p];
			int ia=a-'0';
			int ib=b-'0';
			int cc=ia+ib+up;
			up=cc/10;
			cc=cc%10;
			res.push_back('0'+cc);
		}
		if (up) res.push_back('0'+up);
		return res;
	}
	string multiply(string num1, string num2) {
		reverse(num1.begin(),num1.end());
		reverse(num2.begin(),num2.end());
		n=num1.length();
		m=num2.length();
		string cur;
		for (int i=0;i<m;i++){
			char ch=num2[i];
			string r=Mul(ch,num1);
			cur=Add(cur,r,i);
		}
		reverse(cur.begin(),cur.end());
		bool conflag=true;
		int preZero=0;
		for (int i=0;i<cur.length()-1;i++){
			if (cur[i]!='0'){
				conflag=false;
			}
			else{
				if (conflag){
					preZero++;
				}
			}
		}
		
		return cur.substr(preZero,cur.length()-preZero);
	}
};

  

posted @ 2014-10-06 17:41  zombies  阅读(164)  评论(0编辑  收藏  举报