c/c++大整数乘法

作者: harvey_dong | 来源:发表于2017-06-03 17:07 被阅读21次

    Description

    求两个不超过200位的非负整数的积。

    Input

    有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

    Output

    一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

    Sample Input

    12345678900

    98765432100

    Sample Output

    1219326311126352690000

    代码:

    #include<stdio.h>

    #include<string.h>

    int main(int argc, char *argv[])

    {

    int a[200],b[200],c[400]={0},i,j,m,l,k,t,h;

    char aa[200],bb[200];

    scanf("%s%s",&aa,&bb);

    l=strlen(aa);

    t=strlen(bb);

    for(m=0,j=l-1;j>=0;j--,m++)

    a[m]=aa[j]-'0';

    for(m=0,j=t-1;j>=0;j--,m++)

    b[m]=bb[j]-'0';

    //上面的处理和大整数加法一样!这里就不多说了!

    for(i=0;i<l;i++)

        for(j=0;j<t;j++)

            c[i+j]+=a[i]*b[j];        //理解这里是关键!

    //同样这里是把超过10的进位!!

    for(i=0;i<l+t;i++)

    if(c[i]>=10)

    {

    c[i+1]=c[i+1]+c[i]/10;

    c[i]%=10;

    }

    for(i=l+t-1;i>=0;i--)

    if(c[i]==0)continue;

    //上面是把有前导0的数去掉!

    else {k=i;break;}

    if(i == -1)printf("0");

    for(i=k;i>=0;i--)

    printf("%d",c[i]);

    printf("\n");

    return 0;

    }

    相关文章

      网友评论

        本文标题:c/c++大整数乘法

        本文链接:https://www.haomeiwen.com/subject/wllmfxtx.html