高精度乘法

来源:互联网 发布:中山网络自学大专 编辑:程序博客网 时间:2024/05/17 07:41

乘高精

<span style="font-size:18px;">#include<stdio.h>#include<string.h>int a[1000],b[1000],c[1000];void mul(){    int i,j,len;    for (i=1;i<=a[0];i++)        for (j=1;j<=b[0];j++)    {        c[i+j-1]+=a[i]*b[j];        c[i+j]+=c[i+j-1]/10;        c[i+j-1]%=10;    }    len=a[0]+b[0];    while ((len>1)&&(c[len]==0)) len--;    c[0]=len;}int main(){    int i,len1,len2;    char s1[1000],s2[1000];    scanf("%s",s1); len1=strlen(s1);    scanf("%s",s2); len2=strlen(s2);    for (i=0;i<=len1;i++) a[len1-i]=s1[i]-'0'; a[0]=len1;    for (i=0;i<=len2;i++) b[len2-i]=s2[i]-'0'; b[0]=len2;    mul();    for (i=c[0];i>=1;i--) printf("%d",c[i]);    return 0;}</span>
乘单精

<span style="font-size:18px;">#include<stdio.h>int a[100000];void c(int x){    int i,len=a[0];    for (i=1;i<=len;i++) a[i]*=x;    for (i=1;i<=len;i++)    {         a[i+1]+=a[i]/10;         a[i]%=10;    }    while (a[len+1]>=10)    {        len++;        a[len+1]+=a[len]/10;        a[len]%=10;    }    if (a[len+1]!=0) len++;    a[0]=len;}void print(){    int i;    for (i=a[0];i>=1;i--) printf("%d",a[i]);}int main(){    int n,i;    scanf("%d",&n);    a[0]=1;a[1]=1;    for (i=1;i<=n;i++)    {        c(i);    }    print();    return 0;}</span><span style="font-size:24px;"></span>



0 0
原创粉丝点击