高精度乘法入门详解(高精乘高精)
来源:互联网 发布:wechat.class.php实例 编辑:程序博客网 时间:2024/06/18 07:19
高精度乘法。输入两个正整数,求它们的积。
【算法分析】
类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位,同时对每一位进行乘法运算时,必须进行错位相加,如图3、图4。
分析c数组下标的变化规律,可以写出如下关系式:ci = c’i +c”i +…由此可见,c i跟a[i]*b[j]乘积有关,跟上次的进位有关,还跟原c i的值有关,分析下标规律,有c[i+j-1]= a[i]*b[j]+ x + c[i+j-1]; x=c[i+j-1]/10 ; c[i+j-1]%=10;
高精度乘法的参考程序:#include<iostream>#include<cstring>#include<cstdio>using namespace std;int main(){ char a1[100],b1[100]; int a[100],b[100],c[100],lena,lenb,lenc,i,j,x; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(a1);gets(b1); lena=strlen(a1);lenb=strlen(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; 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]; //当前乘积+上次乘积进位+原数 x=c[i+j-1]/10; c[i+j-1] %= 10; } c[i+lenb]=x; //进位 } lenc=lena+lenb; while (c[lenc]==0&&lenc>1) //删除前导0 lenc--; for (i=lenc;i>=1;i--) cout<<c[i]; cout<<endl; return 0;}
阅读全文
0 0
- 高精度乘法入门详解(高精乘高精)
- 入门篇:高精度乘法
- 高精度乘法(不压位)
- 高精度乘法(小数)
- 高精度乘法(正整数)
- 高精度模板(乘法)
- NOJ 1149高精度乘法(另含高精度加、减&除详解)
- NOJ 1149高精度乘法(另含高精度加、减&除详解)
- 高精度加法入门详解
- 高精度减法入门详解
- 高精度(大整数乘法)
- POJ 3289(高精度乘法)
- 大整数乘法(高精度)
- 高精度(乘法和加法)
- (C语言)高精度乘法
- POJ 1001(高精度乘法)
- 高精度乘法
- 高精度乘法
- QueryRunner类方法
- 【Spring】DispatcherServlet源码分析
- 关于Android开发自己的一些知识储备
- 线程创建
- 手机扫描二维码原理和二维码生成的实现
- 高精度乘法入门详解(高精乘高精)
- 用nagios实现服务器状态监控
- cmd输入一个日期,算出是一年的多少周
- Windows下搭建JNI开发环境
- 前端框架的思考
- NHibernate composite-id class must override Equals() 解决办法
- css hack分类及使用方法
- pandas 选择某几列
- jQuery DOM-获取、设置、添加、删除html文本的内容