当前位置: 首页 > news >正文

高精度问题


目录

算法实现基础 

高精度加法A+B

测试链接 

源代码 

代码重点

高精度减法A-B

测试链接 

源代码 

代码重点

高精度乘法A*b和A*B

测试链接 

源代码 

代码重点

高精度除法A/b和A/B

测试链接 

源代码 

代码重点

高精度求和差积商余


算法实现基础 

本算法调用STL库函数vector容器来使用

vector库的详细用法可查看单链双链表以及vector 中的部分内容

建议学习过vector的使用方法之后再来看本算法文章

由于Java与Python等语言拥有特性可以不使用高精度算法实现

因此本篇文章主要讲解的是c++的高精度算法

高精度加法A+B

测试链接 

洛谷P1601 A+B Problem(高精)

源代码 

c++解法

代码重点

1.数字的存储为倒叙存储。就vector容器的特点来说,在头部插入元素的难度以及数据处理量要远远大于在尾部插入元素,因此对于长整数的存储来说,在vector容器当中倒叙存储(注意字符数组与字符数组的转换),对于答案容器中的数字也是倒叙存储。

2.t的功能包括计算当前位数的和和为下一位的和做进位

3.如果t不为0时证明仍有进位,若此时答案数组全部已经计算完毕则证明要在最高位加一

4.auto类型的设定可以让系统根据函数的返回值类型自动对C进行类型限制

#include <iostream>
#include <vector>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B)
{vector<int> C;int t = 0;if(A.size()<B.size())return add(B,A);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(1);return C;
}
int main()
{string a,b;cin>>a>>b;vector<int> 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 = add(A,B);for(int i = C.size()-1;i >= 0;i -- )cout<<C[i];return 0;
}

Python解法

a=int(input())
b=int(input())
ans=a+b
print(ans)

高精度减法A-B

测试链接 

 洛谷P2142 高精度减法

源代码 

c++解法

代码重点

1.cmp函数,当大整数A和B的长度不相等时,比较二者长度即可。当二者长度相同时,从最高位依次向下比,当有其中一位不相等时,返回本位比较值即可。当各位都相等时,则返回ture。经过此函数的处理之后,若布尔函数返回true则为A>=B的情况。若布尔函数返回false则为A<B的情况

2.sub函数:t为借位情况,经过cmp函数的调整之后A一定是大于等于B的,所以从最低为开始减,若此位运算结果小于0,则加10再对10取余为本位结果,必向高位进行了借位,因此在下一位运算时-1。若此位运算结果大于等于0,则不进行借位,下次运算时t为0。在进行运算之后,要进行去掉前导0的运算

3.main函数,依旧本着方便运算的原则对于大整数进行倒叙存储,根据cmp函数结果进行分流,当true时为正,倒叙输出C即可。当false时为负,首先输出一个负号,再倒序输出即可

#include <iostream>
#include <vector>
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;
}
vector<int> sub(vector<int> &A,vector<int> &B)
{vector<int> C;int 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) % 10);if(t < 0)t = -1;else t = 0;}while(C.size() > 1 && C.back() == 0)C.pop_back();return C;
}
int main()
{string a,b;cin>>a>>b;vector<int> 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');if(cmp(A,B)){auto C = sub(A,B);for(int i = C.size() - 1;i >= 0;i -- )cout<<C[i];}else{cout<<"-";auto C = sub(B,A);for(int i = C.size() - 1;i >= 0;i -- )cout<<C[i];}
}

 Python3

a=int(input())
b=int(input())
ans=a-b
print(ans)

高精度乘法A*b和A*B

测试链接 

 洛谷P1303 A*B Problem

源代码 

c++解法(b为短数据)

代码重点

1.c++代码为大整数乘以小整数,因此对于洛谷的那道题来说只能通过40%的数据。高精度大乘小的原理在于A从最低为乘b乘到最高位,其中的t为进位,乘b之后当前位为(t + A[i] * b)%10,进位为((t + A[i] * b)%10)/10

2.其余依旧是大整数通过string和vector进行逆序存储逆序输出

#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
vector<int> mul(vector<int> &A,ll &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;}return C;
} 
int main()
{string a;ll b;cin>>a>>b;vector<int> A;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 -- )cout<<C[i];return 0;
}

Python3(B为长数据)

A*B太麻烦直接用Python3

a=int(input())
b=int(input())
ans=a*b
print(ans)

高精度除法A/b和A/B

测试链接 

洛谷P1480 A/B Problem

源代码 

 c++解法(b为短数据)

代码重点

1.与高精度加法、减法、乘法不同的是,高精度除法在div函数之中对于A的遍历顺序为从为到头,因存储时为倒叙存储,即为从最高位开始计算。所以,r作为一个余数来模拟人工算法,因一道题当中很可能不仅仅只对于除法进行考察,很有可能是四则运算,因此为了方便起见,C需要反转一下便于后面的输出,注意在反转之后要去掉前导零,因洛谷上的b为小整数小于10^9,因此能够通过所有数据测试点

2.部分题目可能要输出余数,因此将输出余数那一行的注释去掉就ok了

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
vector<int> div(vector<int> &A,ll &b,ll &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 = r % b; }reverse(C.begin(),C.end());while(C.size() > 1 && C.back() == 0)C.pop_back();return C;
}
int main()
{string a;ll b,r;cin >> a >> b;vector<int> A;for(int i = a.size() - 1;i >= 0;i -- )A.push_back(a[i] - '0');auto C = div(A,b,r);for(int i = C.size() - 1;i >= 0;i -- )cout<<C[i];//cout<<endl<<r;//此处输出的为余数return 0;
}

Python3解法(B为长数据)

a=int(input())
b=int(input())
ans=a//b
print(ans)

高精度求和差积商余

c++太太太太太头疼了还是Python3比较暴力省事

a=int(input())
b=int(input())
print(a+b)
print(a-b)
print(a*b)
print(a//b)
print(a%b)

相关文章:

高精度问题

目录 算法实现基础 高精度加法AB 测试链接 源代码 代码重点 高精度减法A-B 测试链接 源代码 代码重点 高精度乘法A*b和A*B 测试链接 源代码 代码重点 高精度除法A/b和A/B 测试链接 源代码 代码重点 高精度求和差积商余 算法实现基础 本算法调用STL…...

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关&#xff0c;除了反向代理后端服务外&#xff0c;还可对接口进行预处理。 比如本文提及的一个小功能&#xff0c;根据http header某个字段的值&#xff0c;等于多少的时候&#xff0c;返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…...

【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口

前言 前几年WPS还可以免费处理5页以内的PDF转excel&#xff0c;现在必须付费了&#xff0c;而且百度其他在线的PDF转excel都是要收费的&#xff0c;刚好前几年调研过百度OCR的高精度含位置接口&#xff0c;依然是每天可以免费调用50次&#xff0c;本篇是基于此接口&#xff0c;…...

vue2 elementui if导致的rules判断失效

优化目标 和 目标转化出价必填的 切换的时候还会隐藏掉 这时候的if语句会导致rules判断失效 我的办法是把判断拉到外面 别放在el-form-item里 <section v-if"unitForm.baseTarget OCPM && unitForm.cpaTargetOptions ! undefined && unitForm.cpaTa…...

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;2&#xff09; 背景 架构图 正片开始之前&#xff0c;请一定先熟悉上面的架构图&#xff0c;跟着我的步骤&#xff0c;一步一步执行成功&#xff0c;相信后续根据自己特定的需求定制CI/CD。 需求 …...

嵌入式科普(25)Home Assistant米家集成意味着IOT的核心是智能设备

目录 一、概述 二、一张图说尽HA 三、HA的相关资料 四、米家集成划重点 五、总结 一、概述 小米Home Assistant 米家集成开源一周star近15k&#xff0c;迭代4个版本&#xff0c;12个贡献者 本文科普一下Home Assistant&#xff08;简称HA&#xff09;、米家集成&#xff…...

spring cloud gateway 3

**Spring Cloud Gateway 3** 是 Spring Cloud 生态系统中的一个重要组件&#xff0c;用于构建 API 网关&#xff0c;提供路由、监控、安全等关键功能。以下是关于 Spring Cloud Gateway 3 的详细介绍&#xff1a; ## 1. 什么是 Spring Cloud Gateway&#xff1f; **Spring Clou…...

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …...

游戏引擎学习第62天

回顾 我们目前正在开发一把虚拟剑&#xff0c;目的是让角色可以用这把剑进行攻击。最初的工作中&#xff0c;我们使用了一个摇滚位图作为虚拟剑的模型&#xff0c;并且实现了一个基本的功能&#xff1a;角色可以丢下剑。但这个功能并没有达到预期的效果&#xff0c;因为我们想…...

LeetCode - Google 校招100题 第6天 回溯法(Backtracking) (8题)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144743505 LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21题)校招100题 第3天 动态规划(DP) (20题)...

C项目 天天酷跑(下篇)

上篇再博客里面有&#xff0c;接下来我们实现我们剩下要实现的功能 文章目录 碰撞检测 血条的实现 积分计数器 前言 我们现在要继续优化我们的程序才可以使这个程序更加的全面 碰撞的检测 定义全局变量 实现全局变量 void checkHit() {for (int i 0; i < OBSTACLE_C…...

达梦数据守护搭建

主备库初始化 ./dminit path/dmdata/data db_nameDM01 instance_nameDMSVR01 port_num5236 page_size16 extent_size32 log_size500 case_sensitive1 SYSDBA_PWDDM01SYSDBA ./dminit path/dmdata/data db_nameDM02 instance_nameDMSVR02 port_num5236 page_size16 extent_size3…...

记录一次前端绘画海报的过程及遇到的几个问题

先看效果 使用工具 html2canvas import html2canvas from html2canvas// 绘画前的内容 我就不过多写了<div class"content" ref"contentRef" v-show"!imgShow"><img :src"getReplaceImg(friendObj.coverUrl)" alt"&qu…...

24.12.26 SpringMVCDay01

SpringMVC 也被称为SpringWeb Spring提供的Web框架,是在Servlet基础上,构建的框架 SpringMVC看成是一个特殊的Servlet,由Spring来编写的Servlet 搭建 引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc<…...

一分钟快速了解Ecovadis认证等级划分

Ecovadis认证等级划分&#xff0c;作为评估企业社会责任表现的重要标尺&#xff0c;其细致而严谨的体系为全球范围内的企业提供了一个可量化的衡量标准。这一认证等级不仅彰显了企业在环境保护、劳工权益、商业道德以及可持续发展等方面的努力与成就&#xff0c;更是企业向国际…...

科技云报到:人工智能时代“三大件”:生成式AI、数据、云服务

科技云报到原创。 就像自行车、手表和缝纫机是工业时代的“三大件”。生成式AI、数据、云服务正在成为智能时代的“新三大件”。加之全球人工智能新基建加速建设&#xff0c;成为了人类社会数字化迁徙的助推剂&#xff0c;让新三大件之间的耦合越来越紧密。从物理世界到数字世…...

【网络云计算】2024第52周-每日【2024/12/26】小测-理论实操-备份MySQL数据库并发送邮件-解析

文章目录 1. 编写备份脚本2. 设置定时任务3. 注意事项 【网络云计算】2024第52周-每日【2024/12/26】小测-理论&实操-备份MySQL数据库并发送邮件-解析 为了实现您提出的Discuz数据库备份任务&#xff0c;包括备份脚本、定时任务、备份成功邮件确认、脚本运行时长、备份后的…...

菜鸟带新鸟——基于EPlan2022的部件库制作(3D)

设备逻辑的概念&#xff1a; 可在布局空间 中和其它对象上放置对象。可将其它对象放置在 3D 对象上。已放置的对象分到组件的逻辑结构中。 将此属性的整体标识为设备逻辑。可使用不同的功能创建和编辑设备逻辑。 设备的逻辑定义 定义 / 旋转 / 移动 / 翻转&#xff1a;组…...

Level DB --- MemTable

MemTable是Level DB中重要的组件&#xff0c;它主要处理Level DB内存级别的增删查改。 基本数据结构 基础的存储数据结构如图1所示&#xff0c;这是一个存储单元的结构。其中1是internal key size&#xff0c;这里面包括两部分&#xff0c;一部分我们Level DB存储key-value中…...

【山西长治】《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准》(长财行[2022]25号)-省市费用标准解读系列32

《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准(试行)》&#xff08;长财行[2022]25号&#xff09;于2022年8月1日开始试行&#xff0c;此标准由长治市财政局、长治市行政审批管理局编制&#xff0c;是对信息化建设项目预算管理的基本要求&#xff0c;主要适用…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...