char * mutiply(const char * num1,const char * num2)
...{
int len1 = strlen(num1);
int len2 = strlen(num2);
static char result[MAX_NUM*2];
memset(result,'0',MAX_NUM*2);

char mid[2]=...{0,0};//保存两个个位数相乘的结果,mid[0]存放十位数,mid[1]存放个位数
int sign=0; //进位
int sign2=0; //进位
for (int j=1;j<=len2;j++)
...{
for (int i=1;i<=len1;i++)
...{
int tmp = (num1[len1-i]-'0')*(num2[len2-j]-'0');
mid[1]=tmp%10;
mid[0]=(int)tmp/10; int pos = MAX_NUM*2 - 1 - ( (i-1) +(j-1) );
sign = int(((result[pos]+mid[1])-'0')/10); //求个位相加进位,有则为1,无则为0
result[pos]='0'+(result[pos]+mid[1]-'0')%10; //把个位数加到结果去 sign2 = (int)((result[pos - 1]+sign+mid[0]-'0')/10); //求十位相加进位,有则为1,无则为0
result[pos - 1] = '0'+(result[pos - 1]+sign+mid[0]-'0')%10; //把十位数加到结果去 //依次检查进位,直到没有进位为止
for (int k=1;sign2;k++)

...{
sign =(int) ((result[pos - 1 - k]+sign2-'0')/10);
result[pos - 1 - k] = '0'+(result[pos - 1 - k]+sign2-'0')%10;
sign2 = sign;
}
}
}
int i=0;
for(;result[i]=='0';i++)
;
return result+i;

}
for (int k=1;sign2;k++)
...{
sign =(int) ((result[pos - 1 - k]+sign2-'0')/10);
result[pos - 1 - k] = '0'+(result[pos - 1 - k]+sign2-'0')%10;
sign2 = sign;
}
}
}
int i=0;
for(;result[i]=='0';i++)
;
return result+i;
}
本文介绍了一个使用 C 语言实现的字符串乘法算法。该算法能够处理任意长度的字符串相乘问题,并通过逐位相乘再累加的方式得出最终结果。文章详细展示了如何管理进位、如何将中间结果存储及相加的过程。
5652

被折叠的 条评论
为什么被折叠?



