1051:A × B problem 大数相乘

给你两个整数,请你计算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

题目来源

ZJGSU

 

 

对于两个大数相乘,和一个大数乘上一个int有相识之处,要先把两个大数翻转一下,在进行模拟就ok了,

 

代码范例:

 1 #include <stdio.h>
 2 #include <string.h>
 3  
 4 #define N 210
 5 int turn (char a[], int b[]);
 6  
 7 int main ()
 8 {
 9     int n, i, j, lena, lenb, yu, s;
10     char a[N], b[N];
11     int sum[N], A[N], B[N], l = 0;
12  
13     scanf ("%d", &n);
14  
15     while (n --)
16     {
17         scanf ("%s %s", a, b);
18         if (l)
19             printf ("\n");
20         printf ("Case %d:\n%s * %s = ", ++l, a, b);
21         memset (sum, 0, sizeof(sum));
22         memset (B, 0, sizeof(B));
23         memset (A, 0, sizeof(A));
24         lena = turn(a, A);
25         lenb = turn(b, B);
26  
27         for (i=0; i<lena; i++)
28         {
29             yu = 0;
30             for (j=0; j<N; j++)
31             {
32                 s = sum[i+j] + yu + A[i] * B[j];
33                 sum[i+j] = s % 10;
34                 yu = s / 10;
35             }
36         }
37  
38         i = N - 1;
39         while (sum[i] == 0)
40             i--;
41         for (; i>=0; i--)
42             printf ("%d", sum[i]);
43         printf ("\n");
44     }
45  
46     return 0;
47 }
48  
49 int turn (char a[], int b[])
50 {
51     int len, i, j;
52     len = strlen(a);
53  
54     for (i=0, j=len-1; i<len; i++,j--)
55         b[i] = a[j] - '0';
56  
57     return len;
58 }

 

转载于:https://www.cnblogs.com/alihenaixiao/p/4018061.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值