• 高精度计算(三) /*高精度的乘法运算*/


     高精度乘单精度

    求 a=a*b。( 0<a<10250,  0<b<108)

    输入:

         第一行:a

         第二行:b

    输出:

      a*b 的值。

    样例输入:

       330

       100

    样例输出:

       33000
     
    分析:

         1)a 的每一位都单独与 b 相乘;

         2)再由低到高位依次处理 a 的进位;

         3)最后处理最高位。

    程序实现:

       

     1 //高精度乘单精度 
     2 #include <iostream>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 char s1[300], s2[300];
     7 int a[300];
     8 
     9 int main()
    10 {
    11     int la, b, m;
    12     cin >> s1 >> b;
    13     la = strlen(s1);
    14     for(int i=1;i<=la;i++)
    15         a[i] = s1[la-i] - 48;
    16     for(int i=1;i<=la;i++)
    17         a[i] = a[i] * b;
    18     for(int i=1;i<=la;i++)
    19     {
    20         a[i+1] += a[i] / 10;
    21         a[i] = a[i] % 10;
    22     }
    23     m = a[la+1];
    24     while(m>0)
    25     {
    26         a[++la] = m % 10;
    27         m = m/10;
    28     }
    29     for(int i=la;i>=1;i--)
    30         cout << a[i];
    31     
    32     return 0;
    33 }
    34  

     例 2.6.4 高精度乘高精度

    求 c=a*b(0<a<10250,  0<b<10250)

    输入:

         第一行:a

         第二行:b

    输出:a-b 的值。

    样例输入:

    22222

    33333

    样例输出:

    740725926

    分析:

    假设乘数和被乘数的长度分别为 la 和 lb,则最后的乘积长度最长为 la+lb,最短为 la+lb-1;

    程序实现:边乘边处理进位

    #include <iostream>
    #include <cstring>
    using namespace std;
    int a[300], b[300], c[300];
    char s1[300], s2[300], s3[300];
    
    int main()
    {
    	cin >> s1 >> s2;
    	int la, lb, len;
    	la = strlen(s1);
    	lb = strlen(s2);
    	for(int i=1;i<=la;i++)
    		a[i] = s1[la-i] - 48;
    	for(int i=1;i<=lb;i++)
    		b[i] = s2[lb-i] - 48;
    	for(int i=1;i<=la;i++)//a[i]*b[j]的结果存放在 c[i+j-1] 
    		for(int j=1;j<=lb;j++)
    		{
    			c[i+j-1] = c[i+j-1] + a[i] * b[j];
    			c[i+j] = c[i+j] + c[i+j-1]/10;
    			c[i+j-1] = c[i+j-1] % 10;
    		}
    	len = la + lb;
    	while(c[len]==0 && len>1)
    		len--;			 //去掉多余的前导 0; 
    	for(int i=len;i>=1;i--)
    		cout << c[i];
    	
    	return 0;
    }
    

      

  • 相关阅读:
    安装Apache提示APR not found的解决办法
    使用jQuery和CSS3实现一个数字时钟
    nodejs iconfont处理
    ios html5 长按复制文本
    Weex 开发入门
    Nginx比SRS做得好的地方
    NodeJs mysql 开启事务
    NodeJs使用Mysql模块实现事务处理
    centos7之系统优化方案
    CentOS 7 网络优化(升级内核、开启 BBR)
  • 原文地址:https://www.cnblogs.com/sineagle/p/6019086.html
Copyright © 2020-2023  润新知