描述
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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.