大数乘法

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,k,l,m1,m2,c,flag;
    int s1[1002],s2[1002],s3[2004];     //s1[],s2[]表示2乘数,s3[]表示结果
    char line1[1002],line2[1002];               //用字符串保存数字
    while(scanf("%s%s",line1,line2)!=EOF)
    {
        for(i=l=strlen(line1)-1;i>=0;i--)
            s1[i]=line1[l-i]-'0';
        for(i=l=strlen(line2)-1;i>=0;i--)
            s2[i]=line2[l-i]-'0';     //将字符数组长的整数数组,注意要反过来
        j=strlen(line1)+strlen(line2);  //乘积的长度是两个乘数长度的和
        for(i=0;i<2001;i++)
            s3[i]=0;          //结果初始化,为乘法做准备
        m1=strlen(line1);
        m2=strlen(line2);
        for(i=0;i<m1;i++)
            for(k=0;k<m2;k++)
                s3[i+k]+=s1[i]*s2[k];//逐位相乘,结果加到对应位
            for(i=0,c=0;i<2001;i++)
            {
                k=s3[i]+c;
                s3[i]=k%10;
                c=k/10;   //处理进位
            }
            flag=0;
        for(i=2000;i>=0;i--)
        {
            if(flag||s3[i])
            {
                printf("%d",s3[i]);
                flag=1;
            }
        }
        if(!flag)
            printf("0");
        putchar('\n');
    }
    return 0;
}

 

posted @ 2013-04-02 20:25  尔滨之夏  阅读(215)  评论(0编辑  收藏  举报