码迷,mamicode.com
首页 > 其他好文 > 详细

大整数的乘法运算

时间:2014-08-11 21:33:32      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:大整数的乘法   leetcode   算法   

思想:每次取第二个数的最高位进行一次乘法,把结果乘以10和下一次结果相加,题目来源:leetcode

class Solution {
public:
    //一个整数乘以一个个位数
    string multOneBit(string num,int data)
    {
    	int i = num.size() - 1,carry = 0;
    	string res;
    	for(;i >= 0;--i)
    	{
    		int value = (num[i] - '0') * data + carry;
    		carry = value / 10;
    		value = value % 10;
    		res += (value + '0');
    	}
    	if(carry > 0)res += (carry +'0');
    	reverse(res.begin(),res.end());
    	return res;
    }
    //两个大整数的加法
    string add(string s1,string s2)
    {
    	string res;
    	int i = s1.size() - 1,j = s2.size() - 1,carry = 0;
    	while(i >= 0 && j >= 0)
    	{
    		int value = s1[i--] + s2[j--] - '0' - '0' + carry;
    		carry = value / 10;
    		value = value % 10;
    		res += value + '0';
    	}
    	while(i >= 0)
    	{
    		int value = s1[i--] - '0' + carry;
    		carry = value / 10;
    		value = value % 10;
    		res += value + '0';
    	}
    	while(j >= 0)
    	{
    		int value = s2[j--] - '0' + carry;
    		carry = carry / 10;
    		value = value % 10;
    		res += value + '0';
    	}
    	if(carry > 0)res += (carry + '0');
    	reverse(res.begin(),res.end());
    	return res;
    }
    
    string multiply(string num1, string num2) {
    	int length2 = num2.size(),i;
    	string res;
    	for(i = 0;i < length2;++i)
    	{
    		string s = multOneBit(num1,num2[i] - '0');//每次取第二个数的最高位进行乘法算法
    		if(res.size() != 0)
    		{
    			res = add(res+'0',s);//把原来的结果扩大10倍加上当前的结果
    		}
    		else res = s;
    	}
    	if(res[0] == '0')res = '0';
    	return res;
    }
};


大整数的乘法运算,布布扣,bubuko.com

大整数的乘法运算

标签:大整数的乘法   leetcode   算法   

原文地址:http://blog.csdn.net/fangjian1204/article/details/38496931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!