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

c++ 高精度加法(只支持正整数)

再给大家带来一篇高精度,不过这次是高精度加法!话不多说,开整!

声明

与之前那篇文章一样,如果看起来费劲可以结合总代码来看

定义

由于加法进位最多进1位,所以我们的结果ans[]的长度定义为两个加数中最长长度+1即可

所有变量声明、输入环节和初始化:

string j1,j2;//两个加数 
int l1=j1.length(),l2=j2.length();//两个加数的长度,确保只调用一次length()函数,节约时间 
int ans[max(l1,l2)+1],step=max(l1,l2);//ans[]为最终结果,step可以理解为ans的下标 
int t1,t2,jinWei=0,weiShu;//t1为j1中的一个数字,t2为j2中的一个数字 
cout<<"加数1:";//输入 
cin>>j1;
cout<<"加数2:";
cin>>j2;
for(int i=0;i<max(l1,l2);i++)ans[i]=0;

计算过程(思路)

本文以123456+127来举例,计算过程如下:

我们可以发现从j1[4]+j2[2] 开始,最后得到ans[4]=2;

也就是从两个加数的最后一位开始加,加的结果的个位与上一位的进位的和存入ans[]的最后一位中,然后推进到下一位,以此类推

计算过程(实现)

 由思路可以得出以下for循环:由于有j1的长度更长 j2的长度更长两个加数的长度相等三种情况,所以要分情况取本轮加数(-‘0’为char转int,详见c/c++ char和int互转)

for(int i=min(l1,l2)-1;i>=0;i--){if(l1>l2){//j1的长度更长t1=j1[i+(l1-l2)]-'0';//由于两个加数的长度有偏差,所以数组的下标也不相同(如j1[4]应与j2[2]相加),两个下标之差便是两个加数的长度之差t2=j2[i]-'0';}else if(l1<l2){//j2的长度更长 t1=j1[i]-'0';t2=j2[i+(l2-l1)]-'0';}else{//两个加数的长度相等 t1=j1[i]-'0';t2=j2[i]-'0';}ans[step--]=(t1+t2+jinWei)%10;//step--是因为ans中已经存入了一位数,(t1+t2+jinWei)%10即两数的第i位与上一步的进位相加的和的个位jinWei=(t1+t2+jinWei)/10;
}

以上的代码结束于示例中j1[2]+j1[0]存入ans[3]并保留jinWei=0的操作,此时还有j1[0]和j1[1]没有操作,对于这两位,仅仅需要从j1[1]开始倒退,用j1[1]加上一步的jinWei并存入ans[]中,刷新jinWei即可,如下,初始值为长度差-1(因为两个加数中长度更短的数已经加完了,没有操作的便是较长数剩下的部分,由于下标从0开始,就要-1) :这里又存在j1的长度更长j2的长度更长两种情况,所以要分情况取本轮加数,与上个for相似

for(int i=max(l1,l2)-min(l1,l2)-1;i>=0;i--){ if(l1>l2){//j1的长度更长 t1=j1[i]-'0';ans[step--]=(t1+jinWei)%10;//与上个for相似的操作 jinWei=(t1+jinWei)/10;}else if(l1<l2){//j2的长度更长t2=j2[i]-'0';ans[step--]=(t2+jinWei)%10;jinWei=(t2+jinWei)/10;}
}

ok,在运行完上面这段代码后,所有的位都处理完了,但是最后一轮的jinWei还没有处理,所以让ans[step]+=jinWei(也可以用ans[0]=jinWei,都是一样的)就处理完了整个计算过程:

ans[step]+=jinWei;

打印

因为计算后可能会出现最后一轮没有进位,就像上面举得那个例子一样,那么ans[0]就会是0,这种首位是0的情况当然是不打印为好,如此一来我们就要计算结果的位数(开头定义的weiShu):

//ans[]的最大位数为max(l1,l2)+1,没有进位(jinWei==0)时位数就为最大位数-1(因为首位为0),否则就是有进位,此时的位数为最大位数
if(jinWei==0)weiShu=max(l1,l2);
else weiShu=max(l1,l2)+1;

最后用一个for打印出来:起始值为最大位数减去weiShu,以此来确定起始值为0还是1

cout<<"和:";
for(int i=max(l1,l2)+1-weiShu;i<max(l1,l2)+1;i++)cout<<ans[i];
cout<<endl;

总代码

激动人心的时刻,准备好了吗?

#include<iostream>
using namespace std;
int main(){string j1,j2;//两个加数 int l1=j1.length(),l2=j2.length();//两个加数的长度,确保只调用一次length()函数,节约时间 int ans[max(l1,l2)+1],step=max(l1,l2);//ans[]为最终结果,step可以理解为ans的下标 int t1,t2,jinWei=0,weiShu;//t1为j1中的一个数字,t2为j2中的一个数字 cout<<"加数1:";//输入 cin>>j1;cout<<"加数2:";cin>>j2;for(int i=0;i<max(l1,l2);i++)ans[i]=0;for(int i=min(l1,l2)-1;i>=0;i--){if(l1>l2){//j1的长度更长 t1=j1[i+(l1-l2)]-'0';//由于两个加数的长度有偏差,所以数组的下标也不相同(如j1[4]应与j2[2]相加),两个下标之差便是两个加数的长度之差 t2=j2[i]-'0';}else if(l1<l2){//j2的长度更长 t1=j1[i]-'0';t2=j2[i+(l2-l1)]-'0';}else{//两个加数的长度相等 t1=j1[i]-'0';t2=j2[i]-'0';}ans[step--]=(t1+t2+jinWei)%10;//step--是因为ans中已经存入了一位数,(t1+t2+jinWei)%10即两数的第i位与上一步的进位相加的和的个位 jinWei=(t1+t2+jinWei)/10;}for(int i=max(l1,l2)-min(l1,l2)-1;i>=0;i--){ if(l1>l2){//j1的长度更长 t1=j1[i]-'0';ans[step--]=(t1+jinWei)%10;//与上个for相似的操作 jinWei=(t1+jinWei)/10;}else if(l1<l2){//j2的长度更长t2=j2[i]-'0';ans[step--]=(t2+jinWei)%10;jinWei=(t2+jinWei)/10;}}ans[step]+=jinWei;//ans[]的最大位数为max(l1,l2)+1,没有进位(jinWei==0)时位数就为最大位数-1(因为首位为0),否则就是有进位,此时的位数为最大位数if(jinWei==0)weiShu=max(l1,l2);else weiShu=max(l1,l2)+1;cout<<"和:";for(int i=max(l1,l2)+1-weiShu;i<max(l1,l2)+1;i++)cout<<ans[i];cout<<endl;
}

如有疑问或有办法将此代码变为支持所有数欢迎评论区留言或私信(支持所有数的我会尽快做好)

相关文章:

c++ 高精度加法(只支持正整数)

再给大家带来一篇高精度&#xff0c;不过这次是高精度加法&#xff01;话不多说&#xff0c;开整&#xff01; 声明 与之前那篇文章一样&#xff0c;如果看起来费劲可以结合总代码来看 定义 由于加法进位最多进1位&#xff0c;所以我们的结果ans[]的长度定义为两个加数中最…...

python键盘操作工具:ctypes、pyautogui

这里模拟 Win Ctrl L 组合键 1、ctypes ctypes库&#xff0c;它允许我们直接调用Windows API来模拟键盘输入。 import ctypes import time# 定义所需的常量和结构 LONG ctypes.c_long DWORD ctypes.c_ulong ULONG_PTR ctypes.POINTER(DWORD) WORD ctypes.c_ushortclass…...

计算机网络发展历史

定义和基本概念 计算机网络是由多个计算设备通过通信线路连接起来的集合&#xff0c;这些设备能够互相交换数据、消息和资源。计算机网络的核心功能是实现数据的远程传输和资源共享&#xff0c;它使得地理位置的限制被大大减弱&#xff0c;极大地促进了信息的自由流动和人类社…...

记录安装android studio踩的坑 win7系统

最近在一台新电脑上安装android studio,报了很多错误&#xff0c;也是费了大劲才解决&#xff0c;发出来大家一起避免一些问题&#xff0c;找到解决方法。 安装时一定要先安装jdk&#xff0c;cmd命令行用java -version查当前的版本&#xff0c;没有的话&#xff0c;先安装jdk,g…...

Python图形编程-PyGame快速入门

PyGame快速入门 文章目录 PyGame快速入门1、什么是PyGame2、安装PyGame3、创建PyGame窗口4、处理事件5、绘制对象6、移动对象7、加载和显示图像8、播放声音9、处理用户输入10、碰撞检测11、动画精灵12、管理游戏状态13、Pygame 中的典型主游戏循环1、什么是PyGame Pygame 是一…...

邦芒宝典:8种方法调整职场心态

在职场中拼斗当然要有好的心态&#xff0c;您知道职场心态如何调整吗&#xff1f; ​ ​方法1&#xff1a;自我调整 ​“思想可以使天堂变成地狱&#xff0c;也可以使地狱变成天堂。”你不能样样顺利&#xff0c;但可以事事尽心;你不能左右天气&#xff0c;但可以改变心情;你…...

华为OD2024D卷机试题汇总,含D量50%+,按算法分类刷题,事半功倍

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…...

Unity UGUI 之 Graphic Raycaster

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 首先手册连接如下&#xff1a; Unity - Manual: Graphic Raycaster 笔记来源于&#xff…...

类和对象——相关的零碎知识

前提提示&#xff1a; 其实C中的类和对象&#xff0c;最重要的是6个默认函数&#xff0c;如有忘记&#xff0c;请移步到&#xff1a;类和对象。本章是对于一些细节知识的补充和拓展。 1. 隐示类型转换 在运算时&#xff0c;运算符左右两边的操作数的类型不同&#xff0c;编译器…...

【hadoop大数据集群 1】

hadoop大数据集群 1 文章目录 hadoop大数据集群 1一、环境配置1.安装虚拟机2.换源3.安装工具4.安装JDK5.安装Hadoop 一、环境配置 折腾了一下午/(ㄒoㄒ)/~~ 1.安装虚拟机 参考视频&#xff1a;https://www.bilibili.com/video/BV18y4y1G7JA?p17&vd_sourcee15e83ac6b22a…...

TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO

本教程将完成一个全面的UDP运行流程与GPSDO测试&#xff0c;从下载项目的源代码开始&#xff0c;通过编译过程&#xff0c;最终将项目部署到目标板卡上运行演示。此外&#xff0c;我们还介绍如何修改板卡的IP地址&#xff0c;以便更好地适应您的网络环境或项目需求。 首先从Gi…...

array.some() ==> 查找数组list中,是否有包含与当前currKey的值不一样的misId

需求&#xff1a; const list [ {misId: e, name: 小白}, {misId: e, name: 小白白}, {misId: r, name: 小王}, {misId: r, name: 小小王} ] let currKey r 查找数组list中&#xff0c;是否有包含与当前currKey的值不一样的misId 解决&#xff1a; 要查找数组lis…...

最简单的typora+gitee+picgo配置图床

typoragiteepicgo图床 你是否因为管理图片而感到头大&#xff1f;是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了&#xff0c;它们可以帮你轻松打造自己的图床&#xff0c;让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧&#xff01; Typora …...

【黄啊码】GPT的相关名词解释

GPT是一种基于互联网的、可用数据来训练的、文本生成的深度学习模型 GPT的核心技术是‌变换器&#xff08;Transformer&#xff09;&#xff0c;这是一种神经网络结构&#xff0c;可以有效地处理序列数据&#xff0c;比如文本、语音、图像等。GPT使用了大量的预训练数据&#…...

git stash 命令详解

git stash 描述 git stash 命令用于将当前工作目录中的未提交更改&#xff08;包括暂存区和工作区的更改&#xff09;保存到一个栈中&#xff0c;并恢复工作目录到干净的 HEAD 状态。这样您可以在不提交当前更改的情况下&#xff0c;切换到其他分支或进行其他操作。后续可以通…...

txt格式单词导入有道词典生词本 (java代码方式)

txt格式单词导入有道词典生词本 (java代码方式) 首先要求txt文档里单词的格式&#xff0c;大概需要像这种&#xff1a; 每行是一个单词&#xff0c;格式为&#xff1a;英文单词空格词性单词意思。 注意 导出单词本的名字就是你 txt 文件的名字 我这里是 公共英语三级 单词本 …...

轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)

目录 0 专栏介绍1 数值优化&#xff1a;共轭梯度法2 基于共轭梯度法的轨迹优化2.1 障碍约束函数2.2 曲率约束函数2.3 平滑约束函数 3 算法仿真3.1 ROS C实现3.2 Python实现 0 专栏介绍 &#x1f525;课程设计、毕业设计、创新竞赛、学术研究必备&#xff01;本专栏涉及更高阶的…...

深入浅出WebRTC—ALR

ALR&#xff08;Application Limited Region&#xff09;指的是网络传输过程中&#xff0c;由于应用层的限制&#xff08;而非网络拥塞&#xff09;导致带宽未被充分利用的情况。在这种情况下&#xff0c;应用层可能因为处理能力、手动配置或其他因素无法充分利用可用带宽&…...

BSV区块链技术现实应用原理解析

BSV区块链以其卓越的可扩展性、坚如磐石的安全性、极低的交易成本等特性&#xff0c;成为满足企业当下需求并为企业未来成功奠基铺路的理想技术。 BSV协会近期发布了一个题为《驾驭数字化转型&#xff1a;在自动化世界中建立信任——区块链在数据保护和交易优化中的角色》的报…...

七大基于比较的排序算法

目录 一、基于比较的排序算法概述 1. 插入排序&#xff08;Insertion Sort&#xff09; 2. 选择排序&#xff08;Selection Sort&#xff09; 3. 冒泡排序&#xff08;Bubble Sort&#xff09; 4. 归并排序&#xff08;Merge Sort&#xff09; 5. 快速排序&#xff08;Qu…...

web前端 React 框架面试200题(四)

面试题 97. React 两种路由模式的区别&#xff1f;hash和history&#xff1f; 参考回答&#xff1a; 1: hash路由 hash模式是通过改变锚点(#)来更新页面URL&#xff0c;并不会触发页面重新加载&#xff0c;我们可以通过window.onhashchange监听到hash的改变&#xff0c;从而处…...

5.Fabric的共识机制

在Fabric中,有以下3中典型共识机制。 Solo共识 solo共识机制只能用于单节点模式,即只能有一个Orderer节点,因此,其共识过程很简单,每接收到一个交易信息,就在共识模块的控制下产生区块并广播给节点存储到账本中。 Solo 模式下的共识只适用于一个Orderer节点,所以可以在…...

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中&#xff0c;可能会遇到异步时间差的问题&#xff0c;导致状态没有及时更新到state&#xff0c;引起传参错误。 PS&#xff1a;由于useState是一个普通的函数&#xff0c; 定义为() > void;因此此处不能用await/async替代setTimeout&#xff0c;只能用在返…...

京准:GPS北斗卫星授时信号安全隔离防护装置

京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 1、主要特点 ★信号加固功能&#xff1a; GPS/BDS单系统信号拒止情况下&#xff08;包含受到GPS L1欺骗干扰、GPS L1压制干扰、BDS B1欺骗干扰、BDS B1压制干扰&…...

解决方案架构师系列 - AWS - Pinpoint

AWS Pinpoint介绍 Amazon Pinpoint 为营销人员和开发人员提供了一款可自定义的工具&#xff0c;助力他们大规模地开展跨渠道、行业和活动的客户通信。 Amazon Pinpoint是一个全面的客户参与平台&#xff0c;‌旨在帮助营销人员和开发人员大规模地开展跨渠道、‌行业和活动的客…...

MF173:将多个工作表转换成PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

Docker、containerd、CRI-O 和 runc 之间的区别

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一&#xff0c;Docker&#xff08;公司&#xff09;在生态系统中创建了一些很棒的工具&#xff0c;但不是全部。 容器方面有…...

PRISM-Python 中的规则一个简单的 Python 规则感应系统

欢迎来到雲闪世界.PRISM 是一种现有算法&#xff08;尽管我确实创建了一个 Python 实现&#xff09;&#xff0c;PRISM 相对简单&#xff0c;但在机器学习中&#xff0c;有时最复杂的解决方案效果最好&#xff0c;有时最简单的解决方案效果最好。然而&#xff0c;当我们希望建立…...

DB-GPT:LLM应用的集大成者

整体架构 架构解读 可以看到&#xff0c;DB-GPT把架构抽象为7层&#xff0c;自下而上分别为&#xff1a; 运行环境&#xff1a;支持本地/云端&单机/分布式等部署方式。顺便一提&#xff0c;RAY是蚂蚁深度参与的一个开源项目&#xff0c;所以对RAY功能的支持应该非常完善。…...

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法

汉明权重&#xff08;Hamming Weight&#xff09;&#xff08;统计数据中1的个数&#xff09;VP-SWAR算法 定义 汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中&#xff0c;两个等长字符串之间的汉明距离等于两个字符串对应位置的不同…...

张家口做网站便宜点的/新产品宣传推广策划方案

5月23日更新&#xff1a;昨天&#xff08;5月22日&#xff09;&#xff0c;Google 发布了 Chrome 的 v2.0.172.28 版本&#xff0c;这个版本不再需要本文所提供的参数&#xff0c;直接运行就可以在x64的Windows 7下正常运行和使用。 Google Chrome 是一款对CSS支持得非常好的浏…...

做动效很好的网站/百度收录查询接口

想了解更多好玩的人工智能应用&#xff0c;请关注公众号“机器AI学习 数据AI挖掘”&#xff0c;”智能应用"菜单中包括&#xff1a;颜值检测、植物花卉识别、文字识别、人脸美妆等有趣的智能应用。。数据集首先介绍一下我们的数据集&#xff0c;可以在我的 github 下载该数…...

举报网站建设情况总结/东莞seo整站优化火速

开发使用多线程过程中, 不可避免的会出现多个线程同时操作同一块共享资源, 当操作全部为读时, 不会出现未知结果, 一旦当某个线程操作中有写操作时, 就会出现数据不同步的事件. 而出现数据混乱的原因: 资源共享(独享资源则不会) 调试随机(对数据的访问会出现竞争) 线程间缺少…...

手机网站cms 下载/百度收录批量查询工具

一.前期基础知识储备 traces.txt系统自动生成的记录anr等异常的文件&#xff0c;只记录java代码产生的异常。 如果是旧版本&#xff08;Android Studio3以下的版本&#xff09;的AS&#xff0c;可以直接通过DDMS的File Explorer直接导出来&#xff1a; 之上的AS由于移除了DD…...

动态网站的表单设计/唐山seo推广公司

ERP系统是指建立在信息技术基础上&#xff0c;以系统化的管理思想&#xff0c;为企业决策层及员工提供决策运行手段的管理平台。它是从MRP&#xff08;物料需求计划&#xff09;发展而来的新一代集成化管理信息系统&#xff0c;它扩展了MRP的功能&#xff0c;其核心思想是供应链…...

做网站的宽度为多少/ui培训

前言 有好久没有写博客了,主要这段时间都沉迷学习无法自拔了,哈哈.自吹一波. 前两天不是1024节吗,所以就有很多福利出现了,当然每个人能都获得的信息都有所不同,这就是所谓的信息差.秉着好东西需要分享和开源的好习惯,所以来给你们送福利了. 其他福利 一、1024程序员节最新福利…...