关于大非负整数乘法

昨天做了腾讯的笔试模拟考。其中有一道非负大数的乘法题。
将其转化为两个数组相乘得到另一个数组输出。
关键在于结果的每一位x的数等于两个数组对应位i j(x = i + j)加上其本身进位。所以最好从数组末尾开始相乘。
#define MAXLENGTH 1000  
#include   
#include   
  
void compute(char * a, char * b,char *c)  
{  
	int i,j,m,n;  
	long sum,carry;  
	m = strlen(a)-1;  
	n = strlen(b)-1;  
	for(i = m; i >= 0; i--)  
		a[i] -= '0';  
	for(i = n; i >= 0;i--)  
		b[i] -='0';  
	c[m + n + 2] ='\0';  
	carry = 0;  
	for( int i = m + n;i>=0; i--)  
	{  
		sum=carry;  
		if((j = (i-m)) <0)  
			j = 0;  
		for( ;j <= i && j <= n;j++)  
			sum += a[i - j] * b[j];  
		c[i + 1] = sum %10 + '0';
		carry = sum/10;  
	}  
	if((c[0] = carry + '0')=='0')  
		c[0] = '/040'; 
}  
  
int main()  
{  
   char a[MAXLENGTH],b[MAXLENGTH],c[MAXLENGTH*2];  
   puts("Input multiplier");  
   gets(a);  
   puts("Input multiplier");  
   gets(b);  
   compute(a,b,c);  
   puts("Answer:");  
   puts(c);  
   getchar();  
}  

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/dongliangzxc/article/details/50985233
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞