大数相乘

比赛中经常会遇到大数问题,自己写了一个大数相乘的模板,可能会有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;
}

 

posted on 2013-09-29 18:50  straw_berry  阅读(187)  评论(0编辑  收藏  举报