c语言高精度乘法运算实例及注释



c语言高精度乘法运算实例及注释。高精度运算特别是乘法运算对于我来说真的太难理解了,我甚至研究了一整天都毫无头绪,在这里也就是在网上找到了关于c的高精度乘法运算,希望这个实例可以给您带来帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i, j, k;
char a1[50], a2[50];
int s1[50], s2[50];
int s[100];//这里的数组长度 决定了此运算的精度
void mul(int *s1, int *s2, int *s)
{
for (i=0; i<strlen(a1); i++)
for (j=0; j<strlen(a2); j++)
s[i+j]+=s1[i]*s2[j]; //这里和乘法的算法相似 依次相乘,没看下面的主函数,还真理解不了 :-)
int k=100;
while (!s[k]) //算出s[]的位数 这里最终k的值越小 计算的次数就越多 有没有办法优化下呢
–k;
for (i=0,j=0; i<=k; i++)
{
s[i+1]+=s[i]/10;//把进位加入
s[i]%=10;
}
}
int main()
{
gets(a1);
gets(a2); //获取字符串 放到数组中
int m=strlen(a1)+strlen(a2);
for (i=strlen(a1)-1; i>=0; –i)
s1[i]=(a1[strlen(a1)-i-1]-’0′);
for (i=strlen(a2)-1; i>=0; –i)
s2[i]=(a2[strlen(a2)-i-1]-’0′);
//将a1|a2数组的数转化成整数 并把每一位逆序放到s1|s2数组
for (i=0; i<100; i++)
s[i]=0;
mul(s1, s2, s);
for (i=m-1; i>=0; –i)
printf(“%d”, s[i]); //逆序输出
system(“pause”);
}