• 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 ("
    ");
    20         printf ("Case %d:
    %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 ("
    ");
    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 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    X3850M2安装CertOS 7 KVM 2--Mount
    X3850M2安装CertOS 7 KVM 2--VNC
    X3850M2安装CertOS 7 KVM
    vs2012 opencv 配置
    asp.net MVC code first Migrations : Model 同步到DB中
    HyperV采用硬盘拷贝的方式迁移虚拟机后的问题处理
    事后诸葛亮
    个人作业——软件产品案例分析
    冲刺总结随笔
    Alpha第九天
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4018061.html
Copyright © 2020-2023  润新知