• 蓝桥杯算法提高 P1001(大数乘法)


                      算法提高 P1001  
              时间限制:1.0s   内存限制:256.0MB  
      
      当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。
      具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中
      (长度不会超过16位),最后把这个字符串打印出来。
      例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.

        输入:
          62773417 12345678

        输出:
          774980393241726
     
     
      如果只是为了应付OJ系统的判分直接利用 分治乘法 配合long long int 输出 即可解决
      
     1 #include "stdio.h"
     2 #include "math.h"
     3 int main()
     4 {
     5     long long int S;        //long long int 长度远大于题目要求的16位之内
     6     int n=0,i,j,k1,k2,L1,L2,A,B,C,D,m1,m2,m3,p,q;
     7     scanf("%d",&p); 
     8     scanf("%d",&q);
     9     if(p>q)
    10         j=p;
    11     else
    12         j=q;
    13     while(j!=0)
    14     {
    15         j=j/10;
    16         n++;
    17     }                  //此处计算最长数字的长度
    18     L1=L2=n/2;
    19     for(i=0,k1=p;i<L1;i++)
    20     {
    21         k1=k1/10;
    22     }
    23     A=k1;
    24     for(i=0;i<L1;i++)
    25     {
    26         k1=k1*10;
    27     }
    28     B=p-k1;
    29 
    30     for(i=0,k2=q;i<L2;i++)
    31     {
    32         k2=k2/10;
    33     }
    34     C=k2;
    35     for(i=0;i<L2;i++)
    36     {
    37         k2=k2*10;
    38     }
    39     D=q-k2;
    40 
    41     m1=A*C;
    42     m2=(A-B)*(D-C);
    43     m3=B*D;
    44     S=(m1*pow(10,n)+(m1+m2+m3)*pow(10,n/2)+m3);//题目以十进制数为主故采用pow(10,x)同理可换成其他进制
    45     printf("%lld
    ",S);
    46     return 0;
    47  } 

    判分结果:

    大整数乘法原理简单来说就是把长数字拆分(此处为十进制)

    即可得出 X=A*10n/2+B ,Y=C*10n/2+D

    再推算得X*Y=AC*10n+[(A-B)(D-C)+AC+BD]*10n/2+BD

    蓝桥练习系统的样例数据如下:

    No.      input           output

    1.    7563975 985872    7457111161200

    2.  74863517 5896712    441448599056104

    3.    658942 98541      64932803622

    4.  96574832 54789216   5291259330611712

    5.  32514689 25478691   828431713992099

    6.      123 0          0  

  • 相关阅读:
    Django+ajax 返回json数据挨个显示在页面及页面和后台相互传值
    pycharm、Django+node.js、vue搭建web项目
    windows10使用npm安装vue、vue-cli
    跟踪路由(tracert)及ping命令
    js中arguments详解
    JavaScript 中 call()、apply()、bind() 的用法
    单点登录 JWT -- JSON WEB TOKEN
    js实现冒泡排序,快速排序
    记一次网页加载优化
    移动页面input手机键盘中的“搜索”按键
  • 原文地址:https://www.cnblogs.com/4770k/p/5285814.html
Copyright © 2020-2023  润新知