输入
数据的第一行是整数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 }