c/c++语言开发共享【洛谷P1303A*Bprublem】

题目描述 求两数的积。 输入输出格式 输入格式: 两行,两个数。 输出格式: 积 输入输出样例 输入样例#1: 1 2 输出样例#1: 2 说明 每个数字不超过10^2000,需用高精 这道题还是比较良心的,毕竟在说明中提示了要用高精,那么就要我们用到高精的乘法算法,代码如下: #include<c …

题目描述

求两数的积。

输入输出格式

输入格式:

两行,两个数。

输出格式:

输入输出样例

输入样例#1: 

1   2

输出样例#1: 

2

说明

每个数字不超过10^2000,需用高精

 

这道题还是比较良心的,毕竟在说明中提示了要用高精,那么就要我们用到高精的乘法算法,代码如下:

#include<cstdio>  #include<iostream>  #include<cstdlib>  #include<cstring>  #include<string>  #include<cmath>  #include<algorithm>  #include<iomanip>//本蒟蒻习惯打上所有头文件;  using namespace std;  int main()  {      char a1[2001],b1[2001];      int a[2001]={},b[2001]={},c[200001]={},lena,lenb,lenc,i,j,x;//把a,b,c,数组清零,也可以用memset(a/b/c,0,sizeof(a/b/c));x代表进位数。      scanf("%s",a1);      scanf("%s",b1);//对于洛谷的输入格式,用gets可能会卡bug。      lena=strlen(a1);lenb=strlen(b1);//计算a1、b1的长度,便于后面的循环和进位。      for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;      for(i=0;i<=lenb-1;++i) b[lenb-i]=b1[i]-48;//把字符数组中的数存在a、b数组中,可以像本代码中直接对字符进行计算,也可以用强制类型转换来转换。      for(i=1;i<=lena;++i)//外循环用于对第一个数的每一个数进行计算。      {          x=0;//一定要记住把进位数在内循环内清零,否则将会出现意想不到的效果。          for(j=1;j<=lenb;j++)//内循环用于对第二个数的计算。          {              c[i+j-1]=a[i]*b[j]+x+c[i+j-1];//把第i+j-1个数赋值,(至于为啥是第i+j-1个数,可以自己推一推,直接记住就行)它的值就是第一个数的第i位于第二个数的第j位之积加上进位的数(包括上一位进的数与上一个循环进的数)。              x=c[i+j-1]/10;//进位处理,取该数的进位数。              c[i+j-1]%=10;//保留个位数。          }          c[i+lenb]=x;//将内循环没有进完的数进到下一个循环内。      }      lenc=lena+lenb;//计算c数组的最大长度。      while(c[lenc]==0&&lenc>1)//c[lenc]==0是对0的判定,如果该位不是0,且满足lenc>1(希望有大神指点一下为什么要判定这个,我将这个去掉后也没有什么区别),就输出。         lenc--;//保证循环开始时不是0。      for(i=lenc;i>=1;i--)//循环输出c数组。         cout<<c[i];      cout<<endl;      return 0;//好习惯别忘记。  }

高精乘法计算就是把我们平时用竖式做的乘法转化成更智障的算法,例如53*79:

                                       5    3

                                 x    7    9


                                       2    7

                        +       4    5

                        +       2    1

                        +3     5


                          4     1    8   7

通过程序就可以处理10的n次方之间的乘法,真的很实用。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/604969.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐