【4】高精度运算学习总结(c++)

news/2025/3/25 21:21:15/文章来源:https://www.cnblogs.com/suyaxuan/p/18792356

1.高精度运算是什么
高精度运算,是指参与运算的数(加数,减数,因子 ……)范围大大超出了标准数据类
型(整型,实型)能表示的范围的运算。例如,求两个200位的数的和,就要用到高精度算法,因为常用数据类型不能容下这么大的数。

2.高精度运算的基本思路
可以运用模拟计算过程的方式编写代码:
(1)由于字符数组可以输入n 位,因此采用字符串(或字符数组)读入2个高精度的 数;
(2)由于加减乘运算都需要从右向左运算(包括进位),而且要进行整数运算;因此, 为了方便,我们将2个字符数组逆序存入2个整数数组;这样既可以从左向右运算(运算和 进位),又可以按照整数格式进行运算,比较方便;
(3)将计算结果存入第3个数组,然后按照要求逆序输出结果,就可以实现高精度运算。
注意:需考虑高精度减法、乘法运算中结果为0的情况,及需计算的数是否为负数(题目没有明确的情况下)。

3.高精度加法代码格式
string s1, s2;
int a[250], b[250], c[500], len;
int main() {
cin >> s1 >> s2;
for (int i = 0; i < s1.size(); i++) {
a[s1.size() - i - 1] = s1[i] - '0';
}
for (int i = 0; i < s2.size(); i++) {
a[s2.size() - i - 1] = s2[i] - '0';
}
len = s1.size();
if (s2.size() > s1.size()) {
len = s2.size();
}
for (int i = 0; i < len; i++) {
c[i] = a[i] + b[i];
}
for (int i = 0; i < len; i++) {
if (c[i] >= 10) {
c[i + 1] = c[i + 1] + c[i] / 10;
c[i] = c[i] % 10;
}
}
if (c[len] != 0) {
len++;
}
for (int i = len - 1; i >= 0; i++) {
cout << c[i];
}
步骤:
第一步:用 string.读入高精度整数
第二步:将两个高精度整数逆序存入 ab 两个整数数组
第三步:从左向右,逐位求和,结果存入 c 数组,从左向右,逐位进位
第四步:逆序输出结果

4.高精度减法代码格式

include <bits/stdc++.h>

using namespace std;
string s1, s2;
int a[250], b[250], c[250], p;
char f = '+';

int main() {
cin >> s1 >> s2;
if (s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2)) {
f = '-';
swap(s1, s2);
}
for (int i = 0; i < s1.size(); i++) {
a[i] = s1[s1.size() - i - 1] - '0';
}
for (int i = 0; i < s2.size(); i++) {
b[i] = s2[s2.size() - i - 1] - '0';
}
int len = s1.size();

for (int i = 0; i < len; i++) {if (a[i] < b[i]) {a[i] = a[i + 1] - 1;a[i] = a[i + 10];}c[i] = a[i] - b[i];
}
if (f == '-') {cout << f;
}
for (int i = len - 1; i >= 0; i--) {if (c[i] != 0) {p = i;break;}
}
for (int i = p; i >= 0; i--) {cout << c[i];
}
return 0;

}
步骤:
第一步:判断正负,如果 s1 比 s2 对应的整数小,结果为负,交换s1 s2
第二步:将两个字符串,逆序存入2个整数输出测试
第三步:从左至右,逐位相减,不够借位
第四步:从右向左,逆序输出

5.高精度乘法代码格式

include <bits/stdc++.h>

using namespace std;
string s1, s2;
int a[250], b[250], c[500];
int p;

int main() {
cin >> s1 >> s2;
for (int i = 0; i < s1.size(); i++) {
a[i] = s1[s1.size() - i - 1] - '0';
}
for (int i = 0; i < s2.size(); i++) {
b[i] = s2[s2.size() - i - 1] - '0';
}
for (int i = 0; i < s1.size(); i++) {
for (int j = 0; j < s2.size(); j++) {
c[i + j] = c[i + j] + a[i] * b[i];
if (c[i + j] >= 10) {
c[i + j + 1] = c[i + j + 1] + c[i + j] / 10;
c[i + j] = c[i + j] % 10;
}
}
}
for (int i = s1.size() + s2.size() - 1; i >= 0; i--) {
if (c[i] != 0) {
p = i;
break;
}
}
for (int i = p; i >= 0; i--) {
cout << c[i];
}
return 0;
}

6.高精度除法代码格式

include <bits/stdc++.h>

using namespace std;

int main() {
int a, b, n, t;
cin >> a >> b >> n;
cout << a / b << ".";
t = a % b;
for (int i = 1; i <= n; i++) {
t = t * 10;
cout << t / b;
t = t % b;
}
return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在HTML页面通过JavaScript访问Ollama本地部署的DeepSeek

在HTML页面通过JavaScript访问Ollama本地部署的DeepSeek,顺便解决了 HTML 页面调用 Ollama 服务的跨域问题前排提醒: 1. 操作系统为Windows11 2. 如果你还没有使用Ollama本地部署DeepSeek,可以参考Windows系统上使用Ollama本地部署DeepSeek 3. 顺便解决了 HTML 页面调用 Oll…

【3】进制转换学习总结(c++)

1.进制的基础知识 一:进制是进位计数制,是人为定义的带进位的计数方法。对于任何一种进制,例如:X进制,就表示每一位置上的数运算时都是逢X进一位。比如十进制就是逢十进一,二进制就是逢二进一。 二:生活中常见的进制有:十进制,十二进制,二十四进制,六十进制等。 2.十…

vue+leaflet示例:地图截图批量导出(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

智能Agent如何改造传统工作流:从搜索到全能助手

智能Agent如何改造传统工作流:从搜索到全能助手 引言:当AI遇上工作流 还记得我们以前搜索信息的方式吗?输入关键词,浏览大量结果,筛选有用内容,再整合成我们需要的答案。这个过程不仅耗时,还常常让人感到疲惫。 如今,智能Agent的出现正在彻底改变这一切。想象一下,你只…

vue+leaflet示例:拓展wms以及wmts地图范围裁剪(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:快速渲染聚合矢量瓦片(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:热力图(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:地图全图以及框选截图导出功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:聚合图功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:结合geoserver利用WFS服务实现图层新增功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:结合geoserver利用WFS服务实现图层编辑功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

IDEA使用Docker插件打包+推送+部署

前提条件:在服务器或者虚拟机中已经安装好了Docker1、确认是否安装插件2、配置SSH链接信息3、构建一个简单的SpringBootDemo工程4、编写一点测试代码 @RestController public class HelloController {@GetMapping("/hello")public String hello(){return "<…