C/C++高精度

个人主页:仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客

专题分栏:算法_仍有未知等待探索的博客-CSDN博客

为什么需要高精度算法?

由于c++不能进行位数过高的数据运算,所以要通过模拟数组来进行运算,首先是加法。通过char或string型数据输入字符来模拟数字的输入,数组下表对应的元素应当是处于同一位置的数字,下标相同的两个元素相加表示的既是结果。

目录

一、高精度加法

1、思路

2、代码

二、高精度乘法 

1、思路

2、代码 


一、高精度加法

1、思路

其实高精度加法和普通的加法思路没有什么区别。就是个位数先相加,然后判断进位,在把进位进行相加。最后得到结果。

从个位开始进行相加,进位操作。(通过数组进行存储) 

2、代码

#include<iostream>
#include<string>
using namespace std;const int N = 510;//数字最大可以存储509位的数字
int a[N];//要相加的数字
int b[N];//要相加的数字
int c[N];//得到的结果
int main()
{string str1;//要想加的数字string str2;//要相加的数字cin >> str1;cin >> str2;//将str1和str2进行逆置存放for (int i = 0; i < str1.size(); i++)a[str1.size() - 1 - i] = str1[i] - '0';for (int i = 0; i < str2.size(); i++)b[str2.size() - 1 - i] = str2[i] - '0';//得到最大的位数int ans = max(str1.size(), str2.size());for (int i = 0; i < ans; i++) {c[i] += a[i] + b[i];//相加c[i + 1] = c[i] / 10;//进位c[i] %= 10;//如果1位数大于10,对其进行取余}ans += 1;//避免最大位数相加完之后有进位:比如说500+500,5+5=10,要进位//去除前导0if (c[ans - 1] == 0 && ans > 1)ans -= 1;//输出for (int i = 0; i < ans; i++)cout << c[ans - 1 - i];return 0;
}

二、高精度乘法 

1、思路

  • 按照常规的高精度乘法的思路,分别先用两个数组逆序存储两数,方便计算。
  • 结果的长度必然不会超过两数的长度之和
  • 进行乘法运算时,我们可以先不用考虑进位,按照常规思路直接算。
  • 计算完成后,处理数组中结果大于或等于10的位置,即向前进位。
  • 最后,处理前导零,将结果逆序输出。

高精度乘法和竖式运算的乘法思路是一样的。如图所示:

根据上面的规律可以知道下图的公式。 

2、代码 

#include<iostream>
using namespace std;
const int N = 2000;
int m[N];//要算的数
int n[N];//要算的数
int ans[2 * N];//所得的答案
int main() {string a, b;//字符串输入cin >> a >> b;int la = a.size();//a的字符串长,也就是乘数的位数int lb = b.size();//b的字符串长,也就是乘数的位数int i = 0, j = 0;//逆序存入数组中for (i = 0; i < la; i++) {m[i] = a[la - i - 1] - '0';}//逆序存入数组中for (j = 0; j < lb; j++) {n[j] = b[lb - j - 1] - '0';}//根据公式进行计算for (i = 0; i < la; i++) {for (j = 0; j < lb; j++) {ans[i + j] += m[i] * n[j];}}//上述仅进行了计算各个位的数,没有考虑进位//下面循环考虑进位//ns为答案的位数,由例子可知,答案的位数的最小值为la+lb-1int ns = la + lb - 1;for (i = 0; i < ns; i++) {//各位大于9时,才考虑进位的问题if (ans[i] > 9) {ans[i + 1] += ans[i] / 10;ans[i] %= 10;}//如果i+1进位大于ns,ns要进行更新if (i + 1 > ns) {ns++;}}//逆序打印//考虑先导0的问题if (ans[i] == 0 && ns > 1)ns--;for (i = ns; i >= 0; i--) {cout << ans[i];}return 0;
}

 谢谢大家的支持!

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

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

相关文章

.babyk勒索病毒解析:恶意更新如何威胁您的数据安全

导言&#xff1a; 在数字时代&#xff0c;威胁不断进化&#xff0c;其中之一就是.babyk勒索病毒。这种病毒采用高级加密算法&#xff0c;将用户文件锁定&#xff0c;并要求支付赎金以获取解密密钥。本文91数据恢复将深入介绍.babyk勒索病毒的特点、如何应对被加密的数据&#…

(1)(1.17) Maxbotix 模拟声纳

文章目录 前言 1 连接到Pixhawk 2 通过Mission Planner进行设置 3 测试传感器 4 参数说明 前言 XL-Maxbotix-EZ 系列模拟声纳&#xff08;XL-MaxSonar-EZ0、EZ4 和 EZL0&#xff09;是相对便宜的短距离&#xff08;7m 至 10m&#xff09;测距仪&#xff0c;主要设计用于室…

实施方法论

软件实施方法论(通用) 软件项目实施交付模型很多领域流传着别人家的传说&#xff1a;别人家的孩子学习成绩好才艺多还长得帅&#xff0c;别人家的客户钱多人傻速来&#xff0c;别人家的公司不加班产品做得好工资还发的倍儿高。这一切事情实际上都有常量和变量&#xff0c;比如…

计算机毕业设计项目选题推荐(免费领源码)java+SSM+mysql澄海区人民新闻中心管理系统67273

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

应用程序生成器:App Builder 2023

DecSoft应用程序生成器 专为小屏幕设备设计&#xff0c;但也可以&#xff08;无需更改&#xff09;部署在平板电脑等较大设备中。 如果您想创建现代桌面和移动应用程序&#xff0c;那么您来对地方了&#xff01;DecSoft App Builder 是一个专业的可视化开发环境&#xff0c;用于…

自学人工智能该从哪里开始准备?

随着人工智能技术的飞速发展&#xff0c;越来越多的人对学习人工智能产生了浓厚的兴趣。然而&#xff0c;对于许多初学者来说&#xff0c;不知道如何开始自学人工智能。今天&#xff0c;我将向大家介绍一些自学人工智能的步骤&#xff0c;帮助大家更好地入门这个领域。 第一步&…

微服务:何为RPC框架

前言 最近在看有关分布式和微服务的知识&#xff0c;首先第一个碰到的就是RPC框架&#xff0c;常见的RPC框架其实有很多&#xff0c;比较常见的比如&#xff1a;阿里的Dubbo、ApacheThrift、谷歌的gRPC、腾讯的tRPC等等。RPC作为远程调用协议在微服务架构中可以说是比较常见了&…

2024年(上海) 集成软件及系统管理博览会

2024年&#xff08;上海&#xff09; 集成软件及系统管理博览会 2024(Shanghai) integrated software and Systems Management Expo 时间&#xff1a;2024年3月26-28日 地点&#xff1a;上海跨国采购会展中心 政策指导: 中华人民共和国国家发展和改革委员会 中华人民共和国工…

算法——动态规划(新)

什么是动态规划&#xff1f; 动态规划算法的基本思想-求解步骤-基本要素和一些经典的动态规划问题【干货】-CSDN博客 一、三步问题 面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09; 思路 我们要知道&#xff0c;走楼梯&#xff0c;前三个阶梯步数已经知道&…

AnyLogic 8.8.4:遗传优化和步行电梯 AnyLogic 8.8.5

AnyLogic 8.8.4&#xff1a;遗传优化和步行电梯 2023年7月19日 | 阿纳斯塔西娅日利亚耶娃 新发布行人建模 AnyLogic 8.8.4 现已可供下载。新版本有两个显着特点&#xff1a;内置基因优化和行人图书馆电梯。有关 AnyLogic 8.8.4 中发布的所有改进和更新的更多详细信息&#xf…

【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘

本文主要介绍更改Arduino IDE &#xff08;含2.0以上版本&#xff09;默认库文件位置的方法。 原创文章&#xff0c;转载请注明出处&#xff1a; 【实用技巧】更改ArduinoIDE默认库文件位置&#xff0c;解放C盘&#xff0c;将Arduino15中的库文件移动到其他磁盘-CSDN博客文章浏…

【开源】基于Vue.js的独居老人物资配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4.2 新增物资4.3 查询物资4.4 查询物资配送4.5 新增物资配送 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的独居老人物资配送系统&#xff0c;包含了社区档案、…