OJ 大数的乘法

来源:互联网 发布:黑客帝国矩阵革命在线 编辑:程序博客网 时间:2024/04/30 01:22


2326: 大数的乘法【数组】

Description

大数是指计算的数值非常大或者对运算的精度要求非常高,用已知的数据类型无法精确表示的数值。例如:我们要计算如下两个数的乘积时,用我们已知的数据类型是无法精确表示其结果的:

a1 = 11111111111111111111111111111111111

b1 = 11111111111111111111111111111111111111

求:a1 * b1;

Input

输入两行:每行一个数字,每行的数字不超过100位;

Output

输出一行:为这两个大数的乘积

Sample Input

1111111111111111111111111111111111

Sample Output

123456790123456666654320987654321

#include<stdio.h>
#include<string.h>
int main()
{    freopen("fff.txt","r",stdin);
    char a[100],b[100];
    int k,p=-1,i,l,n,j,m;
    int c[10000]={0};
    int s;
    gets(a);
    gets(b);
    n=strlen(a);
     l=strlen(b);
    for(i=n-1;i>=0;i--)
    {   p++;
        k=p;
        for(j=l-1;j>=0;j--)
        {
            s=((int)a[i]-48)*((int)b[j]-48);
            if(s<10)
                {   if(c[k]+s<10)
                    c[k]+=s;
                    else
                    {
                        c[k]=c[k]+s-10;
                        c[k+1]+=1;
                        m=k;
                            while(c[m+1]>=10)
                           {
                             c[m+1]=0;
                             c[m+2]+=1;
                             m++;
                           }
                    }
                }
            else
            {   c[k]=c[k]+s-((c[k]+s)/10)*10;
                if(c[k+1]+(c[k]+s)/10<10)
                    c[k+1]+=(c[k]+s)/10;
                else
                {
                    c[k+1]=c[k+1]+(c[k]+s)/10-10;
                    m=k;
                    c[m+2]+=1;
                        while(c[m+2]>=10)
                    {
                        c[m+2]=0;
                        c[m+3]+=1;
                        m++;
                    }
                }
            }
            k++;
        }
    }
    for(i=k-1;i>=0;i--)
        printf("%d",c[i]);
  return 0;
}

0 0
原创粉丝点击