C语言实现字符串乘法运算 - 高效竖式算法
该函数实现了两个字符串的乘法运算,其中 str1 和 str2 为需要相乘的两个字符串。该函数采用了竖式乘法的思想,首先将两个字符串转化为整数数组 a 和 b,然后按照竖式乘法的规则,对每一位进行相乘并相加,最终得到结果存储在数组 c 中。最后将数组 c 中的结果按照从高位到低位的顺序输出即可。
在代码中,变量 i 和 j 分别表示两个字符串中当前正在进行乘法运算的位数,变量 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('
');
}
原文地址: https://www.cveoy.top/t/topic/oJMA 著作权归作者所有。请勿转载和采集!