高精度的乘除法

这篇具有很好参考价值的文章主要介绍了高精度的乘除法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

高精度乘低精度

高精度乘低精度模板

// C = A * b, A >= 0, b >= 0
vector<int> mul(vector<int> &A, int b){
    vector<int> C;
    int t=0;
    for(int i=0;i<A.size()||t;i++){
        if(i<A.size()) t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}

高精度乘低精度模板题 AcWing 793. 高精度乘法

793. 高精度乘法

给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。

输入格式

共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

共一行,包含 A×B 的值。

数据范围

1≤A的长度≤100000,
0≤B≤10000

输入样例:

2
3

输出样例:

6

代码:

#include <iostream>
#include <vector>
using namespace std;
// C = A * b
vector<int> mul(vector<int> &A, int b){// b为低精度 
    vector<int> C;//定义答案 C 
    int t = 0;//进位 
    for (int i = 0; i < A.size()||t; i ++) {// A的长度大于 b,遍历 A的长度即可
	// ||t(省代码用的,写一块去了);t!=0,该进位就进位
		//计算当前位乘 b的结果
        if(i<A.size()) t += A[i] * b;//省代码这种很少能一全两美,还得另外追加条件(保证是所求数据)
		//解释:( ||t及 if(i<A.size())其实也是防止超位的数未加)
        C.push_back(t % 10); //向 C压入 t进位后的数(取个位) 
        t /= 10; //进位     
    }
    //考虑 b=0的情况 
    while (C.size() > 1 && C.back() == 0) C.pop_back();//删除前导 0
    return C;//返回(得到)答案
}
int main() {
    string a;//大数据,以字符串形式保存输入
    int b;//小数据 
    cin >> a >> b;
    vector <int> A;
    //规律:倒序入,倒序出
    for (int i = a.size() - 1; i >= 0; i  --) A.push_back(a[i] - '0');// a[i]-'0':字符转数字 
    auto C = mul(A, b);//高精度乘低精度
    for (int i = C.size() - 1; i >= 0; i --) printf("%d",C[i]);
	return 0;
}
 


高精度除以低精度

高精度除以低精度模板

// A / b = C ... r, A >= 0, b > 0
vector<int> div(vector<int> &A, int b, int &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();
    return C;
}
 

高精度除以低精度模板题 AcWing 794. 高精度除法

794. 高精度除法

给定两个非负整数(不含前导 0) A,B ,请你计算 A/B 的商和余数。

输入格式

共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

共两行,第一行输出所求的商,第二行输出所求余数。

数据范围

1≤A的长度≤100000,
1≤B≤10000,
B 一定不为 0

输入样例:

7 
2

输出样例:

3 
1

代码:文章来源地址https://www.toymoban.com/news/detail-419256.html

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
// A / b,商是 C,余数是 r 
vector<int> div(vector<int> &A,int b,int &r){//r是引用;取 r的地址符,便于直接对余数 r进行修改
    vector<int> C;//定义答案 C(即商) 
    r=0;//余数 
    for(int i=A.size()-1;i>=0;i--){//从最高位开始处理
        r=r*10+A[i];//将上次的余数 *10,再加上当前位的数,得到被除数
        C.push_back(r/b);//往 C中压入商(用余数整除 b) 
        r%=b;//更新余数
    }
    //除法是从高位向低位运算,而 C的前导 0都在 vector的头部而不是尾部,
	//(是尾部的话可以直接用 C.pop_back()函数删除前导 0) 
	//便于操作(其实就是想直接用函数来处理(摸鱼)),我们可以把 C翻转,
	//这样 0就位于 vector的尾部,使用 pop函数删除前导 0
    reverse(C.begin(),C.end());//翻转数组 
    while(C.size()>1&&C.back()==0) C.pop_back();//删除前导 0 
    return C;//返回(得到)答案
}
int main(){
    string a;//大数据 
    int b;//小数据,b为低精度 
    cin>>a>>b;
    vector<int> A;
    //从高位到低位处理(用逆序遍历) 
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    int r;//余数
    auto C = div(A,b,r);//高精度除以低精度 
    for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);//将 C从最高位传给最低位
    cout<<endl<<r<<endl;//输出余数
    return 0;
}


到了这里,关于高精度的乘除法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高精度加法,减法,乘法,除法(上)(C语言)

    前言 本篇内容介绍加法和减法,如果想看乘法和除法就点这里-高精度乘法,除法 加,减,乘,除这些运算我们自然信手捏来,就拿加法来说,我们要用c语言编程算a+b的和,只需让sum = a+b即可,可是这是局限的,我们都知道int的表示的最大值为2147483647(32位和64位机器)。但

    2024年02月03日
    浏览(28)
  • 【c++】算法:高精度(经典加减乘除){含解析(图解)}

    Hi~ o(* ̄▽ ̄*)ブ,今天来一起看看c++算法之高精度 之后会持续更新有关c++算法系列,欢迎观看!(#^.^#) 目录 前言 使用高精度的目的: 基本方法介绍:   一、A+B problem 基本思路解析: 具体步骤: 代码如下: 二、A-B problem 基本思路解析: ​编辑 具体步骤:  代码如下:  三

    2024年01月23日
    浏览(43)
  • C语言 加减乘除模 的 高精度计算 (超详细)

    目录 高精度加法 高精度乘法 高精度减法          高精度除法 高精度模法   高精度计算 是模拟算法的一种,通过字符串和整型数组的使用,将加减乘除的竖式运算 模拟 出来,达到计算的目的。其步骤大致分为:一,将字符串数据存到整型数组中,二,模拟算法,不同的

    2023年04月24日
    浏览(31)
  • C/C++ 高精度(加减乘除)算法二进制优化

    第一章 简单实现 第二章 压位优化 第三章 二进制优化(本章) 上一章《C/C++ 高精度(加减乘除)算法压位优化》实现了优化的高精度计算,采用int32的整型数组每个元素可以储存9个10进制数字,想要再进一步优化计算速度,可以改变数据存储方式,采用二进制存储数字。依然采

    2024年02月11日
    浏览(28)
  • matlab绘制三角函数乘除法的问题

    普通的,画一个sin(x)或者cos(x)网上一大堆,不说了。 关于绘画y=sin(x)*cos(x),看结论的直接拉到最后就好。前面要说一下解决问题的过程。 我想画一个很复杂的函数,其中包含了三角函数的乘除法。 在matlab中输入上式以后,发现报错。 很奇怪,我并没有矩阵啊。 然后一

    2024年02月12日
    浏览(27)
  • Vivado IP核之浮点数乘除法 Floating-point

    Vivado IP核之浮点数乘除法 Floating-point 目录 前言 一、浮点数乘除法示例 二、Floating-point IP核配置步骤 1.乘法器配置 2.除法器配置 三、仿真 1.顶层代码 2.仿真代码 四、仿真结果分析 总结          随着制造工艺的不断发展,现场可编程逻辑门阵列(FPGA)的集成度越来越高

    2024年02月03日
    浏览(24)
  • 高精度乘法模板(fft)

     正常高精度复杂度是o(n^2),fft复杂度o(nlogn)

    2024年02月10日
    浏览(28)
  • 【算法笔记】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

    求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C)、位运算、递归、公式、sizeof。 习题链接:题目链接 该题把我们的所有能用的方法都给限制死了,我们只能用一些的特殊的方法来做。不知道大家在思考的过程中考没考虑过

    2024年02月07日
    浏览(46)
  • (基础算法)高精度加法,高精度减法

    什么叫做高精度加法呢?包括接下来的高精度减法,高精度乘法与除法都是同一个道理。正常来讲的话加减乘除,四则运算的数字都是整数,也就是需要在int的范围之内,但当这个操作数变得非常\\\"大\\\"的时候( 其实就是一个字符串,比方说有一个数是20位,如果用整数视角来

    2024年02月01日
    浏览(31)
  • 高精度算法详解

    首先要知道为什么需要高精度算法: 高精度算法是 处理大数字 的数学计算方法,当数字过大不能用 int 和 long long 存储时,我们就可以 使用string和vector类型 来存储他们的每一位,然后进行计算。 我们可以先把要输入的两个数字放到vector中存储,注意要 反着存(后边做加法

    2024年01月17日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包