【算法】高精度

article/2025/8/19 13:59:35

作者:指针不指南吗
专栏:算法篇

🐾不能只会思路,必须落实到代码上🐾

文章目录

  • 前言
  • 一、高精度加法
  • 二、高精度减法
  • 二、高精度减法
  • 三、高精度乘法
  • 四、高精度除法

前言

​ 高精度即很大很大的数,超过了 long long 的范围,不能直接读取进行运算,需要用 string 读入,然后存储在数组中去。

​ 高精度算法即把每一位上的数单独拿出来,分别计算,再跟每一位之间的关系,再研究,最后结果仍然存在数组中并输出。


一、高精度加法

  1. 思路

    • 大整数的存储
      • 使用 vector 存储,a[0] 存储个位,依次往后最后存储最高位
    • 代码思想
      • 从个位数开始依次,让a,b每一位相加,结果取模存在结果数组C中,t 表示进位
      • 每次两个数a,b的各个位相加再加上进位t
      • 直到加到最高位
  2. 模板

    #include<bits/stdc++.h>
    using namespace std;//C=A+B
    vector<int> add(vector<int> &A,vector<int> &B)//引用减少时间,不使用引用即把原数据copy一遍,费时间 
    {vector<int> C;  //定义一个结果答案if(A.size()<B.size()) return add(B,A);int t=0;   //t表示进位,个位开始,无需+进位,即t=0 for(int i=0;i<A.size();i++){   t+=A[i];if(i<B.size()) t+=B[i];  //各个位上的数 和 进位 相加 C.push_back(t%10);  t/=10;  //求进位 } if(t) C.push_back(1);  //离开循环时,t没有加 return C;
    }int main()
    {string a,b;vector<int> A,B;cin>>a>>b;  //输入123456//存储大整数  倒着存储 for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');   //存储 6,5,4,3,2,1for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');   //注意这里是字符串的长度aauto C=add(A,B);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);  //注意 倒序输出return 0;
    }
    

二、高精度减法

二、高精度减法

  1. 思路

    • 大整数的存储
    • 核心思想
      • 确保是大数减小数,首先从个位开始作差,取模存储在C中,t 表示借位(这里很巧妙具体看下面的代码
      • 每次各个位上的数作差 - 借位 t ,取模存起来,借位 t=1,没有t=0;
      • 直到 大整数.size( ) 去前导0
  2. 模板

    #include<bits/stdc++.h>
    using namespace std;//判断两个大整数的大小 
    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;
    }//C=A-B
    vector<int> sub(vector<int> &A,vector<int> &B)
    {if(!cmp(A,B)) {cout<<'-';    //如果小减去大数:注意加个 - 负号 return sub(B,A);  //交换 }vector<int> C;int t=0;  //t表示借位 for(int i=0;i<A.size();i++){t=A[i]-t;  //各个位上的数,先减去借位if(i<B.size()) t-=B[i];    //B还有数的话,减去B[i];C.push_back((t+10)%10);  //巧妙:不用分情况,正负数一块取成正的if(t<0) t=1;  //判断是否借位 else t=0;}while(C.size()>1&&C.back()==0) C.pop_back();  //去掉前导0 如003 return C;
    }int main()
    {string a,b;vector<int> A,B;cin>>a>>b;    //大整数的存储for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');auto C=sub(A,B);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);return 0;}
    

三、高精度乘法

高精度乘法一般是 一个大整数乘一个比较小的数

  1. 思路

    • 大整数的存储

    • 核心思想

      • 小的数b不拆,让b依次和大数A的每一位相乘从A的个位开始,t表示进位;
      • 对每次计算A[i]*b+t的结果取模,存在结果数组中,借位除10即可,t可以任意大,比如可以进位22
      • 直到 大数的最高位&&t==0去掉前导0
    1. 模板
    #include<bits/stdc++.h>
    using namespace std;//C=A*b
    vector<int> mul(vector<int> &A,int b)
    {vector<int> C;int t=0;  //t表示进位for(int i=0;i<A.size()||t;i++){   //两个条件都满足才能退出来,否则没有计算完t=A[i]*b+t;   //A的每一位与b相乘加上进位C.push_back(t%10);   //对计算结果取模,存在结果数组中t/=10;  }while(C.size()>1&&C.back()==0) C.pop_back();  //去掉前导0return C;
    }int main()
    {string a;int b;   // 小的数用int 来存就OKvector<int> A;cin>>a>>b;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');auto C=mul(A,b);for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);return 0;} 
    

四、高精度除法

高精度除法一般是一个大的整数除以一个小的整数

  1. 思路

    • 大整数的存储
    • 核心思想
      • 从最高位开始,最高位除以除数,余数r剩下;
      • r*10+大整数的下一位,再除以除数,余数r剩下;
      • 重复,直到个位去掉前导0
  2. 模板

#include<bits/stdc++.h>
using namespace std;//A➗b=C...r
vector<int> div(vector<int> &A,int b,int &r)
{vector<int> C;r=0;  //r表示余数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();  //去掉前导0return 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;   //除法多个一个余数auto C=div(A,b,r);for(int i=C.size()-1;i>=0;i--)  printf("%d",C[i]);printf("\n");printf("%d",r);return 0;}

http://chatgpt.dhexx.cn/article/57JXfiXK.shtml

相关文章

寥寥几段文字就说清楚了什么是精确度和召回率

学习和研究机器学习、深度学习的人经常会需要对AI模型的效果进行判定&#xff0c;其中最常用到的判定依据是精确度(Precision&#xff0c;又称为准确度、精准度)和召回率(Callback)。到底什么是精确度和召回率&#xff1f;它们的本质区别是什么&#xff1f;本文讨论这些问题。 …

试验数据的精准度

文章目录 1 精密度2 正确度3 准确度【参考】【修改记录】 1 精密度 精密度&#xff08;precision&#xff09;&#xff1a; &#xff08;1&#xff09;含义&#xff1a;反映了随机误差大小的程度。 &#xff08;2&#xff09;说明&#xff1a; 可以通过增加试验次数而达到提高…

宾馆客房管理系统Mysql数据库课程设计

引 言 随着全球经济一体化使酒店业客源更加丰富多样化&#xff0c;市场更加广阔多渠道的同时&#xff0c;酒店业更面临着日趋激烈的竞争环境和不断攀升的客户期望&#xff0c;迫使业内人士不断进一步寻求扩大酒店销售、改进服务质量、降低管理成本和提升客户满意度的新法宝来增…

酒店客房住宿预定管理系统(ssm,mysql)

酒店客房住宿预定管理系统(ssm,mysql) (毕业论文11589字以上,共32页,程序代码,MySQL数据库) 代码下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1TZKNh17VthZHIRpBLnsjGA 提取码&#xff1a;8888 【运行环境】 Idea Eclipse MyEclipse J…

酒店管理系统程序设计

酒店管理系统程序设计 随着计算机技术的飞速发展&#xff0c;信息时代的到来&#xff0c;信息改变了我们这个社会。各类行业在日常经营管理各个方面也在悄悄地走向规范化和网络化。市场经济的发展&#xff0c;消费者消费意识的提高&#xff0c;酒店行业的竞争越来越激烈。为了…

JAVA酒店管理系统

目录 E-R图 数据库搭建 功能模块 代码部分 E-R图 数据库搭建 功能模块 1.首先要通过 JAVA 代码连接数据库&#xff0c;通过 jdbc 插件2.设计主菜单、子菜单&#xff0c;里面内容是管理酒店的各种操作&#xff0c;我会设置相应的功能模块完成操作。3.要使这个系统能够持续…

酒店后台管理系统、客栈管理、入住会员、房间管理、房源、房型、订单、报表、酒店企业、短信模板、积分、打印、交接班、住宿、入住、锁房、收支流水、房间销售、消费项目、酒店管理、渠道销售、支付管理、连锁酒店

酒店后台管理系统、客栈管理、入住会员、房间管理、房源、房型、订单、报表、酒店企业、短信模板、积分、打印、交接班、住宿、入住、锁房、收支流水、房间销售、消费项目、酒店管理、渠道销售、支付管理、连锁酒店 Axure原型演示及下载地址&#xff1a;产品大牛 - 让产品工作…

中小型酒店管理系统

[摘要]计算机网络如果结合使用信息管理系统&#xff0c;能够提高管理员管理的效率&#xff0c;改善服务质量。优秀的中小型酒店管理系统能够更有效管理用户预订酒店业务规范&#xff0c;帮助管理者更加有效管理用户预订酒店&#xff0c;可以帮助提高克服人工管理带来的错误等不…

ASP.NET-酒店管理系统

绪论 1.1本系统的课题背景 中国改革开放以后&#xff0c;我国大力发展经济、教育、旅游等先进产业链&#xff0c;人们对于外出旅游和群体聚餐的需求越来越大。而且我国的良好的科学教育水平和人民文化素质的提高&#xff0c;为酒店管理系统提供了良好的机遇和前景。 采用现代…

酒店客房预订管理系统简单实现

酒店客房预订管理系统 纯java实现&#xff0c;通过IO流对本地文件进行读取操作 需求分析 入住客人信息管理 管理所有入住客人的基本信息&#xff0c;包括开房登记、退房结账、查询、客人延期续费、按姓名详细查询等客人预订信息管理 管理所有预订客户的基本信息&#xff0c;…

简易酒店管理系统

简易酒店管理系统 个人独立开发者&#xff0c;只包括前台营业管理&#xff0c;系统开发过程参考多个酒店系统的优点&#xff0c;结合自身对此行业的理解开发而成。成都地区可以上门安装及培训。我只卖源代码&#xff0c;不负责具体现场实施 开发技术选型&#xff1a;基于.net4.…

sql酒店管理系统

简单sql server酒店管理系统 <1> 负责工作流和功能分析&#xff0c;E/R图设计 <2> 负责关系模式设计&#xff0c;存储过程&#xff0c;触发器&#xff0c;视图设计的使用 数据库概念模型设计 数据库逻辑设计 关系模型 酒店&#xff08;酒店编号&#xff0c;酒店…

课程设计---宾馆客房管理系统

课程名称&#xff1a; 数据库原理及应用 项目名称&#xff1a;宾馆客房管理系统 eclipse、Tomcat、MySQL8、Navicat【项目内容】 1、主要数据表 客户住房信息登记表&#xff0c;客房信息统计表&#xff0c;账目统计表等。 2、功能模块 1&#xff09;接待人员可以完成为客人预…

酒店管理系统的设计与实现

Word下载链接如下&#xff1a; https://download.csdn.net/download/yw1990128/87096359 一 设计背景 1.1 课题现状 随着国家社会经济水平的提升&#xff0c;各酒店的发展速度越来越快&#xff0c;入住人员也越来越多。酒店房间的管理要求也愈来愈大&#xff0c;所以很多酒店正…

酒店管理系统

酒店后台管理系统 这是一个基于ssmjsp的maven后台管理系统项目&#xff0c;使用idea,Mysql来搭建项目&#xff0c;在完成项目后&#xff0c;我想通过一篇博客来记录我的学习过程已经对项目进行讲解&#xff0c;具体的代码会放在Github上 功能介绍&#xff1a; 1&#xff0c;能…

Hotel Manager 酒店管理系统

Hotel Manager 酒店管理系统 问题分析 菜单界面 操作员能够方便的选择所需要进行的操作 在main函数中对每次操作跳转到不同的函数中 执行完操作后返回到管理页面 不同房间的标准价格制定&#xff0c;收费方式的制定&#xff1a;/天 或 /小时 每个房间的收费方式要写2个 ro…

酒店管理系统的设计与实现/酒店客房管理系统/酒店预定系统

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;酒店管理系统当然也不能排除在外。酒店管理系统是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采…

酒店管理系统/酒店客房管理系统的设计与实现

摘 要 酒店管理系统采用B/S模式&#xff0c;促进了酒店管理的安全、高效、快捷的发展。传统的管理模式还处于手工处理阶段&#xff0c;管理效率极低&#xff0c;随着用户的不断增多&#xff0c;传统基于手工管理模式已经无法满足当前用户需求&#xff0c;随着信息化时代的到来…

酒店客房管理信息系统

目 录 摘 要 Abstracts 目 录 第1章 绪论 1.1课题背景 1.2研究意义 1.3研究内容 第2章 技术介绍 2.1相关技术 2.2java技术 2.3MySQL数据库 2.4 Tomcat介绍 2.5SSM框架 第3章 需求分析 3.1需求分析概述 3.2可行性分析 3.2.1经济可行性 3.2.2技术可行性 3.3…

酒店客房管理系统

技术&#xff1a;Java、JSP等 摘要&#xff1a;随着我国经济的不断发展&#xff0c;外出旅游或工作越来越多成为居民必不可少的一部分。所以酒店也在这样的条件下不断快速的发展。同时&#xff0c;随着酒店企业的蓬勃发展&#xff0c;酒店对酒店客房信息的管理的难度不断增大&a…