(TOJ1051)A × B problem

描述

Redraiment碰到了一个难题,需要请你来帮忙:给你两个整数,请你计算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
 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main()
 5 {
 6   char a[101],b[101];
 7   int i,j,k,n,count=1,num2,num3;
 8   scanf("%d",&n);
 9   getchar();
10   while (n--)
11   {
12      int c[100000]={0};
13      scanf("%s %s",a,b);
14      num2=strlen(a);
15      num3=strlen(b);
16      getchar();
17      if (strcmp(a,"0")==0||strcmp(b,"0")==0)  //如果a或b为0,则结果为0 
18      {
19        printf("Case %d:\n",count);
20        printf("%s * %s = 0\n",a,b);
21        count++;
22      }
23      else
24      {
25        for (i = 0; i < num2; i++)
26        {
27           for (j = 0; j < num3; j++)
28           {
29              c[i+j]+=(a[num2-i-1]-'0')*(b[num3-j-1]-'0');
30              k=i+j;
31              while (c[k]>=10)
32              {
33                c[k+1]+=c[k]/10;
34                c[k]%=10;
35                k++;
36              }
37           }
38        }
39       i=9999;
40       num2=i;
41       while (c[i]==0)
42       {
43          i--;
44          num2 = i;
45       }
46       printf("Case %d:\n",count);
47       count++;
48       printf("%s * %s = ",a,b);
49       for (i = num2; i >= 0;i--)
50       {
51          printf("%d",c[i]);
52       }
53       printf("\n");
54    }
55    if (n>=1)
56    { 
57      printf("\n");
58    }
59   }
60   return 0;
61 }
 
作者:xueda120
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/xueda120/p/3092862.html