C++大数相乘

Table of Contents
    
    #include <stdio.h>
    #include <assert.h>
    
    void BigNumMultiply(const char *str1, const char *str2, char *product)
    {
    	assert(str1 != NULL && str2 != NULL && product != NULL);
    
    	int i, j;
    	int len1 = (int)strlen(str1);
    	int len2 = (int)strlen(str2);
    	int *dest = (int*)malloc(sizeof(int)*(len1+len2+1));
    	
    	for (i=0; i<len1+len2+1; i++) { dest[i] = 0; }
    
    	for (i=0; i<len1; i++)
    	{
    		for (j=0; j<len2; j++)
    		{
    			dest[i+j+1] += (str1[i]-'0')*(str2[j]-'0');
    		}
    	}
    
    	for (i=len1+len2-1; i>=0; i--)
    	{
    		// 当i=0时dest[0]=0,这个条件不成立,所以不用担心dest[-1]
    		if (dest[i] >= 10)
    		{
    			dest[i-1] += dest[i]/10;
    			dest[i] %= 10;
    		}
    		product[i] = dest[i]+'0';
    	}
    
    	if (product[0] == '0')
    	{
    		i = 1;
    		while (product[i] != '\0')
    		{
    			product[i-1] = product[i];
    			i++;
    		}
    		product[i-1] = '\0';
    	}
    
    	free(dest);
    	return;
    }
    
    int main(void)
    {
    	char product[50] = {0};
    
    	BigNumMultiply("234324", "54651", product);
    	printf("%s\n", product);
    
    	getchar();
    	return 0;
    }
    

    测试:

    
        string multiply(string num1, string num2) {
    		std::string result;
    		std::vector<int> data;
    		int total = num1.size() + num2.size() + 1;
    		data.resize(total, 0);
    		for (std::size_t i=0; i<num1.size(); i++) {
    			for (std::size_t j=0; j<num2.size(); j++) {
    				data[i+j+1] += (num1[i]-'0') * (num2[j]-'0');
    			}
    		}
    		for (int i=num1.size()+num2.size()-1; i>=0; i--) {
    			if (data[i] >= 10) {
    				data[i-1] += data[i] / 10;
    				data[i] %= 10;
    			}
    			result.insert(result.begin(), data[i] + '0');
    		}
    		while (result.size() > 1 && result[0] == '0') {
    			result = result.erase(0, 1);
    		}
    		return result;
        }