该函数实现了两个字符串的乘法运算,其中 str1str2 为需要相乘的两个字符串。该函数采用了竖式乘法的思想,首先将两个字符串转化为整数数组 ab,然后按照竖式乘法的规则,对每一位进行相乘并相加,最终得到结果存储在数组 c 中。最后将数组 c 中的结果按照从高位到低位的顺序输出即可。

在代码中,变量 ij 分别表示两个字符串中当前正在进行乘法运算的位数,变量 k 表示乘法运算结果在数组 c 中存储的位置。carry 变量用于存储进位的值,tmp 变量用于存储计算结果。在计算过程中,需要注意进位的处理,即对每个位计算结果后需要加上前一位的进位值,并将结果对 10 取模得到该位的数值,再将结果除以 10 得到进位的值。最后,需要去除结果中的前导 0,即从高位开始找到第一个非零位,然后输出该位及其后面的所有位。

需要注意的是,该函数只能处理非负整数的乘法运算,如果需要处理负数的乘法运算,则需要对输入的字符串进行处理,并在计算过程中考虑符号的影响。

void mul(char*str1,char*str2) {
	setZero(a,1000);
	setZero(b,1000);
	setZero(c,1000);
	printf('%s * %s = ',str1,str2);
	
	int i,j,k,carry=0,tmp; 
	int len1=strlen(str1),len2=strlen(str2);
	for(i=0;i<len1;i++)
		a[i]=str1[len1-1-i]-'0';
	for(i=0;i<len2;i++)
		b[i]=str2[len2-1-i]-'0';
	
	for(i=0;i<len1;i++){
		for(k=i,j=0;j<len2;j++,k++){
			c[k]+=a[i]*b[j];
		}
	}
	for(i=0;i<=k;i++) {
		c[i]+=carry;
		tmp=c[i];
		c[i]=tmp%10;
		carry=tmp/10;
	}
	
	for(i=k;c[i]==0;i--);
	for(;i>=0;i--)
		printf('%d',c[i]);
	printf('
');
}
C语言实现字符串乘法运算 - 高效竖式算法

原文地址: https://www.cveoy.top/t/topic/oJMA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录