首页 > 其他分享 >高精度乘法、除法(含代码)

高精度乘法、除法(含代码)

时间:2024-08-05 22:28:53浏览次数:9  
标签:高精度 int vector 乘法 除法 size

昨天给大家讲了高精度加法和减法,今天就来给大家讲讲高精度乘法和除法。

首先,我们一起来看看高精度乘法,高精度乘法的计算方式和我们平时算乘法的方式不太一样,它不是一位一位的乘,而是把乘数看作一个整体,因为高精度乘法一般是大数乘以小数(例题在活动 - AcWing)或者小数乘以小数(例题在信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn))。下图给大家举了一个例子,如下图,高精度除法中,我们先把乘法看作一个整数,用t表示进位,然后依次从低位进行乘法,再更新进位。

具体代码如下:

#include<bits/stdc++.h>
using namespace std; 
vector<int> mull(vector<int> &A,int b){
	int t=0;//进位 
	vector<int> C;//存储答案 
	for(int i=0;i<A.size()||t;i++){//如果i小于A的位数或者t不为0就继续循环 
	if(i<A.size())	t+=A[i]*b;
	C.push_back(t%10);
	t/=10;
	}
	return C;
} 

int main(){
	string a;
	int b;
	vector<int> A;
	cin>>a>>b;
	for(int i=a.size()-1;i>=0;i--)   A.push_back(a[i]-'0');//将字符转换为数值 
	vector<int> C=mull(A,b);
	for(int i=C.size()-1;i>=0;i--)  printf("%d",C[i]); //输出 
	return 0;
} 

然后,我们再来看看高精度除法,高精度除法和我们平常算除法的方式也是差不多的,都是从高位开始 ,如下图

从上图可以看出,高精度除法是从高位开始的,这里我们用r表示余数,初始化r=0,高位为1时,上商为0,余数r更新为1,然后再拿余数乘以10再加上次高位,即r=r*10+A[i],依次类推。

具体代码如下:

#include<bits/stdc++.h>
using namespace std; 
vector<int> div(vector<int> &A, int b, int &r)//r为余数,通过引用的方式传回 
{
    vector<int> C;
    r = 0;
    for (int i = A.size() - 1; i >= 0; i -- )
    {
        r = r * 10 + A[i];
        C.push_back(r / b);
        r %= b;
    }
    reverse(C.begin(), C.end());//因为除法是从高位开始计算并先存储高位的,和之前的加减乘都不一样,所以这里我们要翻转一下
    while (C.size() > 1 && C.back() == 0) C.pop_back();//去掉前导0 
    return C;
}
int main(){
	string a;
	int b;
	vector<int> A;
	cin>>a>>b;
	for(int i=a.size()-1;i>=0;i--)   A.push_back(a[i]-'0');//将字符转换为数值 
	int r;
	vector<int> C=div(A,b,r);//调用函数 
	for(int i=C.size()-1;i>=0;i--)  printf("%d",C[i]); //输出 
	cout<<endl<<r<<endl;
	return 0;
} 

标签:高精度,int,vector,乘法,除法,size
From: https://blog.csdn.net/Chenqin1879/article/details/140931437

相关文章

  • 【每日一题】【DFS】【试除法求约数】【大剪枝】清楚姐姐跳格子 牛客周赛 Round 54 D
    牛客周赛Round54D题清楚姐姐跳格子题目背景牛客周赛Round54题目描述样例#1样例输入#1523154样例输出#12做题思路首先知道ai......
  • 高精度加法、减法(含代码)
    高精度算法是一种用于处理大整数和浮点数的特殊算法。高精度算法的实现原理是将大整数或浮点数拆分成多个小数字,将这些小数字存储在数组中,然后按照特定的规则进行计算。在计算过程中,需要注意进位和舍入的问题。高精度算法最常见的就是:加法、减法、乘法和除法。其中除了除法是......
  • DAY3 高精度算法(+,-,*,/)
    本文将要简单介绍acwing中的高精度算法,高精度指的就是有成百上千位的数进行运算,远远超出当前编程语言中的数据范围。\四个运算中的共同点都是数据位数较长(上千位),处理的方法都是将数据转化为字符串,再将字符串存进vector容器中,根据运算的基本特征进行处理首先介绍高精度加法:题......
  • linux shell 写的一个小玩意(bash含99乘法表和计算器)
     esac.sh 主页面#!/bin/shwhile:do    echo"***********************************"    echo"*                *"    echo"*  输入你想要点的妹妹:1-3号 *"    echo"*    ......
  • 高精度加法、减法、乘法、除法(C++)
    1、引入在进行大整数运算中,因为在C++/C中整数,最大也就是unsignedlonglong也就才(1e19+8e18)位,如果要几百位的相加减就不行了,所以就要用高精度了,这里只在C++/C上使用有价值,在例如python、Java语言上无需写此算法,python可以无限大,Java里有相关库可以引入。2、入门的思路即为......
  • CPU上的快速多维矩阵乘法(草稿)
    CPU上的快速多维矩阵乘法(草稿)Numpy可以在大约8毫秒内将4核IntelCPU上的两个1024x1024矩阵相乘。考虑到这归结为18FLOPS/核心/周期,一个周期需要三分之一纳秒,这是非常快的。Numpy使用高度优化的BLAS实现来实现这一点。BLAS是BasicLinearAlgebra子程序的缩写。这些库提供快速实......
  • 最小二乘法拟合空间直线
    一、空间直线方程1.1一般方程空间直线可以看成成两个平面的交线,设两个平面方程分别为\(A_1x+B_1y+C_1z+D_1=0\)和\(A_2x+B_2y+C_2z+D_2=0\),则直线\(l\)的一般方程可以表示为:\(\left\{\begin{matrix}A_1x+B_1y+C_1+D_1=0\\A_2x+B_2y+C_2+D_2......
  • 北斗/GNSS高精度数据处理暨GAMIT/GLOBK v10.75软件应用
    目录第一部分、UBUNTU操作系统介绍与基本使用第二部分、GAMIT/GLOBK软件安装第三部分、数据获取与预处理第四部分、分步式“玩转”GAMIT软件第五部分、应用GAMIT+网平差软件进行高精度北斗/GNSS工程控制网数据处理与精度评估第六部分、“玩转”TRACK软件第七部分、分步......
  • 如何使用最小二乘法和权重矩阵?
    我知道如何使用Python通过最小二乘法求解A.X=B:示例:A=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,0,0]]B=[1,1,1,1,1]X=numpy.linalg.lstsq(A,B)printX[0]#[5.00000000e-015.00000000e-01-1.66533454e-16-1.11022302e-16]但是如果权重矩阵不......
  • P3811 【模板】模意义下的乘法逆元 题解
    【模板】模意义下的乘法逆元题目背景这是一道模板题题目描述给定n,pn,pn,p求......