使用C++,实现高精度加减乘除法运算!

在这里插入图片描述

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页

我的专栏: \mathcal{{\color{Green} 我的专栏:} } 我的专栏: 《精选文章》《算法》《每日一道编程题》《高精度算法》


文章目录

  • 前言
  • 高精度计算初始模版
  • string 转数组
  • int 转数组
  • 输出数组
  • 加减乘除
  • 完整模版代码
  • 总结


前言

在C++中,储存数据是我们一般用int,long long等自带的数据结构来实现。
但是如果数据非常非常大,单单使用这些就存不下来了!

这时候,我们就要使用高精度计算了

高精度计算的原理其实就是模拟我们常用的竖式计算,使用数组存储。

高精度计算初始模版

我们可以使用数组A,B,C来存储数据,使用string来输入,代码如下:

#include <bits/stdc++.h>
using namespace std;int A[1005], B[1005], C[1005];
/**/;
int main() {string a,b;cin>>a>>b;/**/;return 0;
}

string 转数组

此时就有人要问了:“喂喂喂 string 跟数组完全不是一回事好吗?”
的确,确实不是一回事,所以我们要写一个函数,叫 s2BIG,传入参数字符串 s 和数组 a,将 s 存入 a 中,其中 a[0] 为长度,代码如下:

void s2BIG(string s, int a[]) {a[0] = s.length();for (int i = 1; i <= a[0]; i++) {a[i] = s[a[0] - i] - '0';}
}

int 转数组

此时又有人要问了:“要是我想要将int类型的数据如上存入数组,请问阁下该如何应对呢?”
这很简单,我们要再写一个函数,叫 i2BIG,传入参数 int 类型的整数 s 和数组 a,代码如下:

void i2BIG(int s, int a[]) {while (s > 0) {a[0]++;a[a[0]] = s % 10;s /= 10;}if (s == 0) {a[0] = 1;}
}

输出数组

有的小伙伴已经按捺不住,想要输出我们存入的数据了。此时我们需要编写一个函数 printBIG,只需导入要输出的数组 a,代码如下:

void printBIG(int a[]) {for (int i = a[0]; i >= 1; i--) {cout << a[i];}cout << endl;
}

加减乘除

你现在已经写完了基础部分,那么现在只需加入加减乘除函数,你就完成了所以的模版代码,所以我干脆一口气全给你算了,注意前两个参数是你给到的数据,后一个是处理完之后数据存放的地方,代码如下:

void addBIG(int a[], int b[], int c[]) {c[0] = max(a[0], b[0]);int carry = 0;for (int i = 1; i <= c[0]; i++) {c[i] = a[i] + b[i] + carry;carry = c[i] / 10;c[i] %= 10;}if (carry == 1) {c[0]++;c[c[0]] = 1;}
}void subBIG(int a[], int b[], int c[]) {c[0] = max(a[0], b[0]);for (int i = 1; i <= c[0]; i++) {c[i] = a[i] - b[i];}for (int i = 1; i <= c[0]; i++) {if (c[i] < 0) {c[i] += 10;c[i + 1]--;}}while (c[c[0]] == 0 && c[0] > 1) {c[0]--;}
}void mulBIG(int a[], int b, int c[]) {c[0] = a[0];for (int i = 1; i <= c[0]; i++) {c[i] = a[i] * b;}for (int i = 1; i <= c[0]; i++) {c[i + 1] += c[i] / 10;c[i] %= 10;if (c[c[0] + 1] > 0) {c[0]++;}}
}void divBIG(int a[], int k, int c[]) {int r = 0;for (int i = a[0]; i >= 1; i--) {c[i] = a[i] + r * 10;r = c[i] % k;c[i] /= k;}int len = a[0];while (c[len] == 0 && len != 1)len--;c[0] = len;
}

完整模版代码

完整模版代码如下:

#include <bits/stdc++.h>
using namespace std;int A[1005], B[1005], C[1005];void s2BIG(string s, int a[]) {a[0] = s.length();for (int i = 1; i <= a[0]; i++) {a[i] = s[a[0] - i] - '0';}
}void i2BIG(int s, int a[]) {while (s > 0) {a[0]++;a[a[0]] = s % 10;s /= 10;}if (s == 0) {a[0] = 1;}
}void printBIG(int a[]) {for (int i = a[0]; i >= 1; i--) {cout << a[i];}cout << endl;
}void addBIG(int a[], int b[], int c[]) {    // 加法c[0] = max(a[0], b[0]);int carry = 0;for (int i = 1; i <= c[0]; i++) {c[i] = a[i] + b[i] + carry;carry = c[i] / 10;c[i] %= 10;}if (carry == 1) {c[0]++;c[c[0]] = 1;}
}void subBIG(int a[], int b[], int c[]) {    // 减法c[0] = max(a[0], b[0]);for (int i = 1; i <= c[0]; i++) {c[i] = a[i] - b[i];}for (int i = 1; i <= c[0]; i++) {if (c[i] < 0) {c[i] += 10;c[i + 1]--;}}while (c[c[0]] == 0 && c[0] > 1) {c[0]--;}
}void mulBIG(int a[], int b, int c[]) {    // 乘法c[0] = a[0];for (int i = 1; i <= c[0]; i++) {c[i] = a[i] * b;}for (int i = 1; i <= c[0]; i++) {c[i + 1] += c[i] / 10;c[i] %= 10;if (c[c[0] + 1] > 0) {c[0]++;}}
}void divBIG(int a[], int k, int c[]) {    // 除法int r = 0;for (int i = a[0]; i >= 1; i--) {c[i] = a[i] + r * 10;r = c[i] % k;c[i] /= k;}int len = a[0];while (c[len] == 0 && len != 1)len--;c[0] = len;
}int main() {string a,b;cin>>a>>b;s2BIG(a,A);s2BIG(b,B);return 0;
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了高精度的使用,高精度可以让你忽视以后所有题目的数据大小。

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

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

相关文章

【Web】CTFSHOW java刷题记录(全)

目录 web279 web280 web281 web282 web283 web284 web285 web286 web287 web288 ​web289 web290 web291 web292 web293 web294 web295 web296 web297 web298 web299 web300 web279 题目提示 url里告诉我们是S2-001 直接进行一个exp的搜 S2-001漏洞分析…

【测试】测试用例篇

目 录 一. 设计测试用例的万能公式(六个)二.设计测试用例的具体方法1.等价类2.边界值3.因果图&#xff08;判定表&#xff09;4.场景设计法5.正交法6.错误猜测法 一. 设计测试用例的万能公式(六个) 设计测试用例的万能公式 测试用例的意义是帮助测试人员了解&#xff1a;测什…

linux 网络服务小实验

实验图和要求&#xff1a; 1&#xff09;网关服务器&#xff1a;ens36&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.44.254/24&#xff1b;Server1&#xff1a;192.168.44.20/24&#xff1b;PC1和Server2&#xff1a;自动获取IP&#xff1b;交换机无需配置。…

GEE:最小距离(minimumDistance)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…

频繁跳槽 可能问题出在你的性格上

谈到跳槽&#xff0c;小伙伴们会想到什么呢&#xff1f;换工作&#xff1f;涨薪&#xff1f;你有没有想过&#xff0c;目前的工作不合适&#xff0c;除了公司的原因&#xff0c;也有可能是自己性格的原因呢&#xff1f; 频繁跳槽有哪些优势和劣势呢&#xff1f;针对这些疑问&…

2024年【A特种设备相关管理(电梯)】找解析及A特种设备相关管理(电梯)模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;电梯&#xff09;找解析是安全生产模拟考试一点通生成的&#xff0c;A特种设备相关管理&#xff08;电梯&#xff09;证模拟考试题库是根据A特种设备相关管理&#xff08;电梯&#xff…

【STM32 CubeMX】I2C层次结构、I2C协议

文章目录 前言一、I2C的结构层次1.1 怎样在两个设备之间传输数据1.2 I2C如何传输数据1.3 硬件框图1.4 软件层次 二、IIC协议2.1 硬件连接2.2 I2C 总线的概念2.3 传输数据类比2.3 I2C信号2.4 I2C数据的含义 总结 前言 在STM32 CubeMX环境中&#xff0c;I2C&#xff08;Inter-In…

开年炸裂-Sora/Gemini

最新人工智能消息 谷歌的新 Gemini 模型 支持多达 1M的Token&#xff0c;可以分析长达一小时的视频 1M Token可能意味着分析700,000 个单词、 30,000 行代码或11 小时的音频、总结、改写和引用内容。 Comment&#xff1a;google公司有夸大的传统&#xff0c;所以真实效果需要上…

鸿蒙语言ArkTS(更好的生产力与性能)

ArkTS是鸿蒙生态的应用开发语言 ArkTS提供了声明式UI范式、状态管理支持等相应的能力&#xff0c;让开发者可以以更简洁、更自然的方式开发应用。 同时&#xff0c;它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;进一步通过规范强化静态检…

qt-C++笔记之打印所有发生的事件

qt-C笔记之打印所有发生的事件 code review! 文章目录 qt-C笔记之打印所有发生的事件1.ChatGPT问答使用 QApplication 的 notify 方法使用 QObject 的 event 方法 2.使用 QObject 的 event 方法3.使用 QApplication 的 notify 方法 1.ChatGPT问答 在Qt C中&#xff0c;若要打…

老兵(11)

百度文心一格&#xff0c;大约是一年前上线并免费向用户开放的。其实也不是免费&#xff0c;而是“电量”比较好获得&#xff0c;白送的就16/每天&#xff0c;如果只是好奇玩玩的话也算够吧。 当时就很开心&#xff0c;因为一直想着把一些文案图像化&#xff0c;做成漫画的形式…

从被“大V”忽悠到自主开发投资分析系统:我在基金投资中的跌宕起伏与转变

从被“大V”忽悠到自主开发投资分析系统&#xff1a;我在基金投资中的跌宕起伏与转变 回顾我初次涉足基金投资的经历&#xff0c;那是一段由盲目跟从、亏损惨重到痛定思痛、自我提升的曲折历程。起初&#xff0c;我深受某些财经“大V”的影响&#xff0c;他们凭借看似精准的市…

算法刷题:复写零

复写零 .习题链接题目描述算法原理初始值步骤1步骤2我的答案: . 习题链接 复写零 题目描述 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素…

LEETCODE 164. 破解闯关密码

class Solution { public:string crackPassword(vector<int>& password) {vector<string> password_str;for(int i0;i<password.size();i){password_str.push_back(to_string(password[i]));}//希尔排序int gappassword.size()/2;while(gap>0){for(int i…

Eclipse Version: 2023-03 (4.27.0) JDK19 Tomcat10.2

Eclipse Version: 2023-03 (4.27.0) JDK19 Tomcat10.2

C语言学习day15:数组强化训练

题目一&#xff1a; 称体重&#xff1a;分别给10个值&#xff0c;来获得最大值 思路&#xff1a; 定义数组&#xff0c;给数组内赋10个值第一个下标的值与第二个下标的值进行比较定义max&#xff0c;将比较得来的较大的值赋值给max一直比较直到比较到最后一个下标&#xff0…

Redis篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、缓存雪崩**二、缓存穿透三、缓存预热四、缓存更新五、缓存降级 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女…

【plt.scatter绘制散点图】:从入门到精通,只需一篇文章!【Matplotlib】

【plt.scatter绘制散点图】&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;【Matplotlib】&#xff01;&#x1f680; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; 一、plt.scatter入门&#xff1a;轻松迈出第一步 &#x1f463;二、…

后端学习:Maven模型与Springboot框架

Maven 初识Maven Maven:是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Maven的作用1.依赖管理2.统一项目结构3.项目构建依赖管理&#xff1a;方便快捷的管理项目依赖的资源(jar包)&#xff0c;避免版本冲突问题   当使用maven进行项目依赖…

太炸了!Sora深夜发布!网友:我要失业了

2022年末&#xff0c;OpenAI聊天机器人ChatGPT的面世无疑成为了引领人工智能浪潮的标志性事件&#xff0c;宣告了新一轮科技革命的到来。无论是聊天娱乐、教育学习&#xff0c;还是工作生产、医疗健康等领域&#xff0c;人工智能正以前所未有的速度渗透到我们生活的方方面面。 …