高精度加减乘除算法模板

news2024/9/25 17:12:03

高精度加减乘除算法模板

  • 高精度加法算法模板
    • 模版题
  • 高精度减法算法模板
    • 模版题
  • 高精度乘法算法模板
    • 模版题
  • 高精度除法算法模板
    • 模版题

高精度加法算法模板

首先,我们要知道高精度算法是C++才用的,Java中是不需要高精度算法的

高精度加法: 两个大的数相加 (数的范围是 大约为10^6)
这里用vector来做

模版题

在这里插入图片描述

#include<vector>
#include<iostream>
#include<cstdio>
#include<string>

using namespace std;

vector<int> add(vector<int> & A, vector<int> & B)
{
    vector<int> C;
    
    int t = 0; //表示进位
    
    for(int i = 0; i < A.size() || i < B.size(); i++)
    {
        
        if(i < A.size())  t += A[i];
        if(i < B.size())  t += B[i];
        
        C.push_back(t % 10);
        t /= 10;
    }
    
    if(t) C.push_back(t); //倒着写,最高位进位的时候方便,直接push_back就行
    
    return C;
}

int main()
{
   string str1, str2;
   cin >> str1  >> str2;
    
    vector<int> A, B;
    
    for(int i = str1.size() - 1; i >= 0; i--)  A.push_back(str1[i] - '0');
    for(int i = str2.size() - 1; i >= 0; i--)  B.push_back(str2[i] - '0');
    
    auto C = add(A, B);
    
    for(int i = C.size() - 1; i >= 0; i--)
        cout << C[i];
        
    cout <<endl;
}

高精度减法算法模板

模版题

在这里插入图片描述

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>

using namespace std;

//判断 A,B大小
//如果 A > B, 就A - B,  A < B, -(B - A)

bool cmp(vector<int> & A, vector<int> & B)
{
    if(A.size() != B.size()) 
            return A.size() > B.size();
    
    for(int i = A.size() - 1; i >= 0; i--)
    {
        if(A[i] != B[i])
            return A[i] > B[i];
    }
    
    return true;
}


vector<int> sub(vector<int> & A, vector<int> & B)
{
    int t = 0;
    
    vector<int> C;
    
    for(int i = 0; i < A.size(); i++)
    {
        t = A[i] - t;
        if( i < B.size() ) t -= B[i];
        
        C.push_back((t + 10) % 10);
        //注意
        //:这里  (t + 10) % 10
        // 有2种情况:如果t 没有借位,t肯定是大于0的,(t + 10) % 10 为t
        //  如果t 需要借位,t肯定是小于0的,t + 10相当于借位了10
        
 
        //需要借位
        if(t < 0) t = 1;
        else t = 0; //不需要借位
    }
    
    
    //除去前导0(要注意保留结果为0的情况)
    while(C.size() > 1 && C.back() == 0)   C.pop_back();
    return C;
}

int main()
{
   
    string str1, str2;
    cin >> str1 >> str2;
    
    vector<int> A, B;
    for(int i = str1.size() - 1; i >= 0; i--)  A.push_back(str1[i] - '0');
    for(int i = str2.size() - 1; i >= 0; i--)  B.push_back(str2[i] - '0');
    
    
    if(cmp(A, B)) 
    {
        auto C = sub(A, B);
        for(int i = C.size() - 1; i >= 0; i--)
        {
            cout << C[i];
        }
    }
    else
    {
        auto C = sub(B, A);
        cout << "-";
        
        for(int i = C.size() - 1; i >= 0; i--)
        {
            cout << C[i];
        }

    } 
    cout << endl;
   
    return 0;

高精度乘法算法模板

一个大的数(vector存储),乘上一个小的数(int存储)

模版题

在这里插入图片描述

//一个大点的数 乘以  一个小点的数(int)

#include<iostream>
#include<cstdio>
#include<vector>
#include<string>

using namespace std;

vector<int> mul(vector<int> & A,int b)
{
    vector<int> C;
    
    int t = 0;
    
    // for(int i = 0; i < A.size(); i++)
    // {
    //     t += A[i] * b;
    //     C.push_back(t % 10);
    //     t /= 10;
    // }
    
    // //处理剩下的t
    // while(t)
    // {
    //     C.push_back(t % 10);
    //     t /= 10;
    // }
    
    
    //合并写
    
      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();
    
    
    //去掉前导0
    while(C.size() > 1 && C.back() == 0) C.pop_back();
    
    return C;
}

int main()
{
    string str1;
    int b;
    cin >> str1;
    cin >> b;
    
    vector<int> A;
    for(int i = str1.size() - 1; i >= 0; i--)   A.push_back(str1[i] - '0');
  
    auto C = mul(A, b);
    
    for(int i = C.size() - 1; i >= 0; i--) cout << C[i];
    cout << endl;
    
    return 0;
}

高精度除法算法模板

高精度整数 除上低精度整数

模版题

在这里插入图片描述

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

vector<int> div(vector<int> & A, int b, int &r)
{
    //对A从最高位进行处理


    vector<int> C;

    for(int i = 0; i < A.size(); i++)
    {
        r = r * 10 + A[i];
        C.push_back(r / b);
        r %= b;
    }

    //去除前导0, 00在前面,pop_back只能删除后面,所以先反转

    reverse(C.begin(), C.end());
    while(C.size() > 1 && C.back() == 0)
    {
        C.pop_back();
    }

    return C;
}

int main() 
{

    string str1;
    int b;
    cin >> str1 >> b;

    vector<int> A;
	//正着存储的,区别于前三种模版
    for(int i = 0; i < str1.size(); i++) A.push_back(str1[i] - '0');
    int r = 0;
    auto C = div(A, b, r);

    for(int i = C.size() - 1; i >= 0; i--) cout << C[i];

    cout <<endl;
    cout << r;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1414979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8S搭建(centos)二、服务器设置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Spring MVC 请求流程

SpringMVC 请求流程 一、DispatcherServlet 是一个 Servlet二、Spring MVC 的完整请求流程 Spring MVC 框架是基于 Servlet 技术的。以请求为驱动&#xff0c;围绕 Servlet 设计的。Spring MVC 处理用户请求与访问一个 Servlet 是类似的&#xff0c;请求发送给 Servlet&#xf…

数据结构.线性表

1.静态分配 #include<iostream> using namespace std; const int N 10; typedef struct {int data[N];int length;}SqList; void InitList(SqList &L) {for (int i 0; i < N; i){L.data[i] 0;}L.length 0; }int main() {SqList L;InitList(L);return 0; }2.动…

实体关系抽取与属性补全的技术浅析

目录 前言1. 实体关系抽取2 实体关系抽取的方法2.1 基于模板的方法2.2 基于监督学习的关系抽取2.3 基于深度学习的关系抽取2.4 基于预训练语言模型的关系抽取 3 属性补全3.1 属性补全任务简介3.1 抽取式属性补全3.2 生成式属性补全 4 未来发展趋势结语 前言 在信息爆炸时代&am…

带延迟的随机逼近方案(Stochastic approximation schemes):在网络和机器学习中的应用

1. 并行队列系统中的动态定价Dynamic pricing 1.1 系统的表述 一个含有并行队列的动态定价系统&#xff0c;该系统中对于每个队列有一个入口收费(entry charge) &#xff0c;且系统运行的目标是保持队列长度接近于某个理想的配置。 这里是这个系统的几个关键假设&#xff1a;…

Spring boot + Azure OpenAI 服务 1.使用 GPT-35-Turbo

Azure OpenAI 服务使用 GPT-35-Turbo 先决条件 maven 注意 beta.6 版本 <dependency><groupId>com.azure</groupId><artifactId>azure-ai-openai</artifactId><version>1.0.0-beta.6</version></dependency>问答工具类 pack…

鸿蒙可视化代码生成器神器

ArkTS 语言 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可…

【Godot4自学手册】第七节背景搭建

各位同学&#xff0c;今天是第七节&#xff0c;在本节我会学习如何使用TileMap来完成背景搭建。 一、添加TileMap结点 先做个介绍&#xff0c;TileMap是基于 2D 图块的地图节点。Tilemap&#xff08;图块地图&#xff09;使用 TileSet&#xff0c;其中包含了图块的列表&#…

分布式id-Leaf算法

一、介绍 由美团开发&#xff0c;开源项目链接&#xff1a;https://github.com/Meituan-Dianping/Leaf Leaf同时支持号段模式和snowflake算法模式&#xff0c;可以切换使用。ID号码是趋势递增的8byte的64位数字&#xff0c;满足上述数据库存储的主键要求。 Leaf的snowflake模…

DAY11_(简易版)VUEElement综合案例

目录 1 VUE1.1 概述1.1.1 Vue js文件下载 1.2 快速入门1.3 Vue 指令1.3.1 v-bind & v-model 指令1.3.2 v-on 指令1.3.3 条件判断指令1.3.4 v-for 指令 1.4 生命周期1.5 案例1.5.1 需求1.5.2 查询所有功能1.5.3 添加功能 2 Element2.0 element-ui js和css和字体图标下载2.1 …

【C++】类和对象(中篇)(全网最细!!!)

文章目录 &#x1f354;一、类的六个默认成员函数&#x1f354;二、构造函数&#x1f35f;1、概念&#x1f35f;2、特性&#x1f369;默认构造函数 &#x1f354;三、析构函数&#x1f35f;1、概念&#x1f35f;2、特性&#x1f369;默认析构函数 &#x1f354;四、拷贝构造函数…

Java项目实战--瑞吉外卖DAY03

目录 P22新增员工_编写全局异常处理器 P23新增员工_完善全局异常处理器并测试 p24新增员工_小结 P27员工分页查询_代码开发1 P28员工分页查询_代码开发2 P22新增员工_编写全局异常处理器 在COMMON新增全局异常捕获的类&#xff0c;其实就是代理我们这些controlle。通过aop把…

OpenCV书签 #结构相似性SSIM算法的原理与图片相似性实验

1. 介绍 结构相似性&#xff08;Structural Similarity&#xff0c;简称SSIM算法&#xff09;&#xff0c;主要用于检测两张相同尺寸的图像的相似度、或者检测图像的失真程度&#xff0c;是一种衡量两幅图像相似度的指标。 定义 给定两个图像 x 和 y&#xff0c;两张图像的结…

基于springboot网吧管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

JAVA大学生兼职平台后台管理

运行环境&#xff1a; tomcat7.0jdk1.7或以上 eclipse或idea 使用技术&#xff1a; springboot 功能描述&#xff1a; 求职人员 注册&#xff0c;登录 选定登录角色&#xff08;1、兼职人员2、发布兼职招聘人员&#xff09; 书写简历&#xff0c;上传学生证照片&#…

LVGL v9学习笔记 | 12 - 弧形控件的使用方法(arc)

一、arc控件 arc控件的API在lvgl/src/widgets/arc/lv_arc.h 中声明,以lv_arc_xxx命名。 arc控件由背景圆弧和前景圆弧组成,前景圆弧的末端有一个旋钮,前景圆弧可以被触摸调节。 1. 创建arc对象 /*** Create an arc object* @param parent pointer to an object, it w…

主成分分析(PCA)Python

实际问题研究中&#xff0c;常常遇到多变量问题&#xff0c;变量越多&#xff0c;问题往往越复杂&#xff0c;且各个变量之间往往有联系。于是&#xff0c;我们想到能不能用较少的新变量代替原本较多的旧变量&#xff0c;且使这些较少的新变量尽可能多地保留原来变量所反映的信…

力扣1312. 让字符串成为回文串的最少插入次数

动态规划 思路&#xff1a; 通过插入字符构造回文串&#xff0c;要想插入次数最少&#xff0c;可以将字符串 s 的逆序 s 进行比较找出最长公共子序列&#xff1b;可以先分析&#xff0c;字符串 s 通过插入得到回文串 ps&#xff0c;其中间的字符应该不会变化&#xff1a; 若 s…

༺༽༾ཊ—设计-工厂-04-方法-模式—ཏ༿༼༻

名称&#xff1a;工厂方法 类型&#xff1a;创建型 目的&#xff1a;用 工厂方法 代替 new操作 创建实例 的方式 优点&#xff1a;易扩展 工厂方法模式是为了克服简单工厂模式的缺点&#xff08;主要是为了满足OCP&#xff09;而设计出来的。简单工厂模式的工厂类随着产品类…

element plus使用问题

文章目录 element plusvue.config.js注意1、有时候会报错 not a function2、使用 ElMessage 报错3、 element plus 版本过高4、警告Feature flag VUE_PROD_HYDRATION_MISMATCH_DETAILS is not explicitly defined.5、报错 ResizeObserver loop completed with undelivered noti…