高精度运算专题3-乘法运算(The multiplication operation)
这个专题呢,我就来讲讲高精度的乘法,下面是三个计算乘法的函数,第一个函数是char类型的,要对字符串进行数字转换,而第二个是两个int类型的数组,不用转换成数字,第三个则更为优化,用a数组-b数组放回数组a里面
函数1思路:要先把char类型的转换成int类型的数,直接每个数-‘0’就可以实现把char类型的转换成int类型的了。
①记录数组a、数组b的长度,放到第一位
②每个位相乘,用一个数来记录进位(初值为0),每个位相乘,加上进位,存入c数组的相对应的位置,每次进位要重新赋值
③最后记得要去掉最高位的0,并把c数组的长度存到第一号位置(c[0])
代码如下:
void mul(char strA[],char strB[],int c[])//正整数的高精度运算 a*b ---> c
{
int a[MaxLength],b[MaxLength];
int i,j,x,lenc;
memset(a,,sizeof(a));//测a长度
memset(b,,sizeof(b));//测b长度
memset(c,,sizeof(c));//测c长度
init(strA,a);//a转换成数字
init(strB,b);//b转换成数字
for(i=;i<=a[];i++)
{
x=;//表示进位,记录
for(j=;j<=b[];j++)//重要的在这里
{
c[i+j-]+=a[i]*b[j]+x;//每个位相乘,加上进位存入c数组
x=c[i+j-]/;//x重新赋值为进位
c[i+j-]=c[i+j-]%;//保留1位
}
c[i+b[]]=x;//表示进位(向c的更高位进位)
}
lenc=a[]+b[];//c的长度就是a+b的长度
while(c[lenc]==&&lenc>) lenc--;//去除高位上多余的0
c[]=lenc;
}
函数2思路:这个函数与函数1没什么太大区别,只是传入的数组类型不一样而已,这个函数不用把字符串数组转换成数字数组,直接计算即可
代码如下:
void mul2(int a[],int b[],int c[])//正整数的高精度运算 a*b ---> c
{
int i,j,x,lenc;
memset(c,,sizeof(c));
for(i=;i<=a[];i++)
{
x=;//表示进位
for(j=;j<=b[];j++)
{
c[i+j-]=c[i+j-]+a[i]*b[j]+x;
x=c[i+j-]/;
c[i+j-]=c[i+j-]%;
}
c[i+b[]]=x;//表示进位(向c的更高位进位)
}
lenc=a[]+b[];//c的长度就是a+b的长度
while(c[lenc]==&&lenc>) lenc--;//去除高位上多余的0
c[]=lenc;
}
高精度运算专题3-乘法运算(The multiplication operation)的更多相关文章
- 高精度运算专题2-减法运算(The subtraction operation)
这个专题呢,我就来讲讲高精度的减法,下面是三个计算减法的函数,第一个函数是char类型的,要对字符串进行数字转换,而第二个是两个int类型的数组,不用转换成数字,第三个则更为优化,用a数组-b数组放回 ...
- 高精度运算专题1-加法运算(The addition operation)
这个专题呢,我就来讲讲高精度的加法,下面是一个计算加法的函数(用数组a加上数组b结果存到数组c里面). 思路:先测一下数组a和数组b的长度,分别放到a[0].b[0]里面去,再从第二位开始相加,记得满 ...
- 高精度运算专题-输出函数与字符串转数字函数(Output function and the string to number function)
输出函数:这个函数别看它小,但浓缩的都是精华啊 作用:对于高精度的数组进行倒序输出 思路:首先从被传入的数组第一位开始,一直往前扫输出就可以了(i--) 注释:因为每个数组的第一位是用来存储这个数组的 ...
- [code]高精度运算
数组存储整数,模拟手算进行四则运算 阶乘精确值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #includ ...
- 系统的讲解 - PHP 浮点数高精度运算
目录 概述 浮点数运算的"锅" 任意精度数学函数 常用数值处理方案 扩展 小结 概述 记录下,工作中遇到的坑 ... 关于 PHP 浮点数运算,特别是金融行业.电子商务订单管理.数 ...
- #C++初学记录(高精度运算)(加法)
高精度运算 不管是int还是double亦或者long long ,这些定义变量都有数据范围的一定限制,在计算位数超过十几位的数,也就是超过他们自身的数据范围时,不能采用现有类型进行计算,只能自己通过 ...
- ICPC Asia Nanning 2017 F. The Chosen One (高精度运算)
题目链接:The Chosen One 比赛链接:ICPC Asia Nanning 2017 题意 \(t\) 组样例,每组给出一个整数 \(n(2\le n\le 10^{50})\),求不大于 ...
- 算法模板 - C++ 高精度运算
C++算法板子 高精度 高精度推荐用python来写,python有大整数,这里写的是关于C++的高精度运算模板 1.高精 * 低精 #include <iostream> #includ ...
- 1001. Exponentiation高精度运算总结
解题思路 这道题属于高精度乘法运算,要求输入一个实数R一个指数N,求实数R的N次方,由于R有5个数位,而N又特别大,因此用C++自带的数据类型放不下. 解题思路是通过数组储存每次乘积结果和底数的每一位 ...
随机推荐
- Tiny6410之重定位代码到SRAM+4096
重定位代码 两个不同的地址概念: 对于程序而言,需要理解两个地址,一个是程序当前所处的地址,即程序运行时所处的当前地址.二是程序应该位于的运行地址,即编译程序时所指定的程序的链接地址.在Tiny641 ...
- python3 验证用户名密码
输入用户名,密码,匹配通过,不匹配报错 import getpass user = input('input username: ') pwd = getpass.getpass('input pas ...
- idea不能加载xml
- CodeForces 675D Tree Construction
递归,$RMQ$. 因为$n$较大,可以采用递归建树的策略. 对每一个点标一个$id$.然后按照$v$从小到大排序,每一段$[L,R]$的根节点就是$id$最小的那个. 因为二叉搜索树可能是一条链,所 ...
- 用Python做SVD文档聚类---奇异值分解----文档相似性----LSI(潜在语义分析)
转载请注明出处:电子科技大学EClab——落叶花开http://www.cnblogs.com/nlp-yekai/p/3848528.html SVD,即奇异值分解,在自然语言处理中,用来做潜在语义 ...
- 淘宝npm镜像使用方法
镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 通过config命令npm config set registry https://registry. ...
- JSON文件处理
牛X的JSON解析JSON字符串显示字典键值 public void ResolveJson() { //定义的JSON字符串,注意JSON的格式 string str = @” { “”Name”” ...
- 2、表单form
只要使用input,就用form,使用方法是在所有的input之外加一个总的form双标签 切记给每个input都加name,提交表单时同时会提交name属性 input可以做的事:文本框.密码框.单 ...
- Oracle SQL自带函数整理
数字函数 abs(n):用于返回数字n的绝对值 ceil(n):返回大于等于数字n的最小整数 floor(n):返回小于等于数字n的最大整数 mod(m,n):返回m/n数字相除后的余数,如果n=0, ...
- CSS三大样式