首页 > 代码库 > 1051:A × B problem 大数相乘
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 }
1051:A × B problem 大数相乘
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。