高精度运算专题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++自带的数据类型放不下. 解题思路是通过数组储存每次乘积结果和底数的每一位 ...
随机推荐
- Java模拟post-get提交
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- PhpSrom安装xdebug
1.php需要安装xdebug,这样能支持调试. 下载地址:http://www.xdebug.org/download.php,若不清楚下载版本,可将phpinfo的信息复制到下载地址页面的cust ...
- hdu1032
#include <iostream> using namespace std; int main() { int a,b,t,i,max; while(cin >> a &g ...
- 当页面加载完成时,JQ触发添加页面的元素的事件触发不了。。
有下代码可知: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default. ...
- Python学习笔记——基础篇【第五周】——正在表达式(re.match与re.search的区别)
目录 1.正在表达式 2.正则表达式常用5种操作 3.正则表达式实例 4.re.match与re.search的区别 5.json 和 pickle 1.正则表达式 语法: import re # ...
- 使用vscode对c进行调试
最近在学习C语言.知道vscode支持对c语言的代码的调试,就想试试.然后找了教程: https://code.visualstudio.com/docs/languages/cpp http://w ...
- 关于masonry
简单的就不说了,网上很多教程 设置优先级 [label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis ...
- FD.io vpp 框架转发图
在ip4-icmp-input 与 ip4-udp-input后可以注册后续的处理函数,ip4-icmp-input根据 icmp的报文类型选择相应的处理函数,而ip4-udp-input根据端口选择 ...
- easyDialog弹窗+zTree部门选择
写一个父页面方法,将name和id赋值 function show(name,id) { $("#deptnoID").val(name); $("#deptnoId&q ...
- ios 点击放大图片,保存至手机相册
直接贴.m文件代码 #import "UIImageView+Scale.h" static CGRect oldframe; @implementation UIImageVie ...