YTU 2326: 大数的乘法【数组】

2326: 大数的乘法【数组】


Description

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

a1 = 11111111111111111111111111111111111

b1 = 11111111111111111111111111111111111111

求:a1 * b1;

Input

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

Output

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

Sample Input

1111111111111111111
111111111111111

Sample Output

123456790123456666654320987654321

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
# define N 666
int main()
{
    char a[999],b[999],c[999];
    int i,j,k,n,m,s,l1,l2;
    char aa[999],bb[999];
    scanf("%s",&a);
    scanf("%s",&b);
    l1=strlen(a);
    l2=strlen(b);
    for(i=0;i<l1;i++)
    {
        aa[i]=a[l1-1-i]-'0'; //change char to number
    }
    for(i=0;i<l2;i++)
    {
        bb[i]=b[l2-1-i]-'0';;// change char to number
    }

    /*for(i=0;i<l1;i++)
    {
        printf("%d",aa[i]);
    }
    printf("\n");
    for(i=0;i<l2;i++)
    {
        printf("%d",bb[i]);
    }
    printf("\n");*/

    for(i=0;i<N;i++)
    {
        c[i]=0;
    }
    for(i=0;i<l1;i++)
    {
        for(j=0;j<l2;j++)
        {
            c[i+j]+=aa[i]*bb[j]; //stimulate * storage in c
            if(c[i+j]>=10)      //carry
            {
                c[i+j+1]+=c[i+j]/10;
                c[i+j]=c[i+j]%10;
            }
        }
    }
    for(i=l1+l2-1;i>=0;i--)
    {
        if(c[i]!=0)
            break; //find the i != 0 
    }
    for(;i>=0;i--)
    {
        printf("%d",c[i]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wyh1618/article/details/80366566