C语言大数相乘的问题

给你两个整数,请你计算A × B。

输入

数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数。

接着有T组数据,每组数据只有一行,包括两个非负整数A和B。

但A和B非常大,Redraiment能保证这些数用long来保存一定会溢出。

但A和B的位数最大不会超过100位。

输出

对应每组测试数据,你都要输出两行:

第一行为:”Case #:”, # 代表这是第几组测试数据。

第二行是一个等式:”A * B = Sum”, Sum 代表 A × B 的结果。

你要注意这个等式里包含了几个空格。

要求每组数据之间都需要保留一个空行。

样例输入

2

1 2

123456789 987654321

样例输出

Case 1:

1 * 2 = 2

Case 2:

123456789 * 987654321 = 121932631112635269

 很显然对于100位的数据我们无法定义他的类型,因此只能用数组一位一位计算,然后输出结果,但应注意要把字符转换成数字,同样运算时千万要注意0的运算

#include<stdio.h>

#include<string.h>

#define MAX 10005

int main()

{

    int n,i,j,t,s;

    char a[102],b[102],temp[105]={0},sum[MAX]={0};

    int lena,lenb,flag;

    scanf(“%d”,&n);

    while(n–)

    {

     flag=0;

     scanf(“%s%s”,a,b);

     lena=strlen(a);

     lenb=strlen(b);

     for(j=lenb-1;j>=0;j–)

        {

          for(t=lena,i=lena-1;i>=0;i–,t–)

            {

              temp[t]=(a[i]-0x30)*(b[j]-0x30);

             }

            for(t=lena;t>=1;t–)

            {

                if(temp[t]>9)

                {

                 temp[t-1]+=temp[t]/10;

                 temp[t]%=10;

                }

            }

            for(s=lena+lenb-flag,t=lena;t>=0;t–,s–)

                sum[s]+=temp[t];

            for(t=lena;t>=0;t–)

                temp[t]=0;

            for(s=lena+lenb;s>=1;s–)

            {

                if(sum[s]>9)

                {

                 sum[s-1]+=sum[s]/10;

                 sum[s]%=10;

                }

            }

            flag++;

        }

        sum[lena+lenb+1]=’\0′;

        for(s=0;s<=lena+lenb;s++)

                sum[s]=sum[s]+0x30;

        for(s=0;s<lena+lenb;s++)

            if(sum[0]==0x30)

            {

                for(t=0;t<=lena+lenb-s;t++)

                sum[t]=sum[t+1];

             }

             else break;

        printf(“Case %d:\n”,m);

        printf(“%s * %s = %s\n”,a,b,sum);

        if(n!=0)

            printf(“/n”);

            for(s=lena+lenb+1;s>=0;s–)

            sum[s]=0;

       }

    return 0;

问题还可以扩展成大数相减,相加,阶乘问题。

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/anhuidelinger/article/details/20142173
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞