大数相乘

比赛中经常会遇到大数问题,自己写了一个大数相乘的模板,可能会有Bug,先凑合看吧;

#include<stdio.h>

#include<string.h>

const int M = 100;



void GetDigit(char s[],int a[])

{

    int i;

    memset(a,0,sizeof(int)*M);

    int len = strlen(s);

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

    {

        a[len-1-i] = s[i]-'0';

    }

}



void Multiply(int a[], int b[], int c[])

{

    int i,j;

    for(i = 0; i < M*2; i++)

        c[i] = 0;

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

    {

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

        {

            c[i+j] += a[i]*b[j];

        }

    }



    for(i = 0; i < 2*M; i++)

    {

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

        c[i] %= 10;

    }



}



int main()

{

    char s1[M],s2[M],s[M*2];

    int a[M],b[M],c[M*2];

    int i,j;

    while(~scanf("%s %s",s1,s2))

    {

        int len1 = strlen(s1);

        int len2 = strlen(s2);



        GetDigit(s1,a);

        GetDigit(s2,b);

        Multiply(a,b,c);



        while(c[j] == 0)

            j--;

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

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

        printf("\n");

    }

    return 0;

}

 

你可能感兴趣的:(大数相乘)