首页 > 其他分享 >高精度加法

高精度加法

时间:2024-12-14 22:28:55浏览次数:9  
标签:10 string 高精度 int sumn 数组 加法 倒序

今天我给大家讲解一下高精度加法,其实还是挺简单的

思路

思路很简单,就是先输入两个string字符串,然后用两个int数组存入字符串中的数字,在手写加法的运算过程,注意处理好进位和前导0,最后再倒序输出就可以了。

接下来我会详细讲解这里的每一步。

字符转数字

循环遍历字符串倒序着减去48,这样它的ascll码刚刚好就是他这个字符所代表的数字,将a赋值进数组中之后,再将b中的值挨个加进数字数组里,这样就能完成加法了。另外有一个小细节就是转数字的前面应该再加上判断语句,如果a的长度大于b的长度就先将a赋值进n数字数组里,反之则先将b赋值进n数字数组里。然后就可以把另一个数组里的字符按同样的方法压进n数组里了。

处理进位

先定义一个变量sumn来储存a数组和b数组长度较大的数组的长度,然后循环sumn次。每次判断n[i]是否大于等于10,如果是,那么把n[i]减去10,再把n[i+1]加上1(因为是倒序的)。

处理前导0

如果n[sumn+1]大于0那么我们就可以把长度加1。

最后倒序输出即可

#include<bits/stdc++.h>
using namespace std;
string a,b;
int n[505],sumn;
void f(string a,string b)
{
	int ansa=a.size(),ansb=b.size();
	sumn=max(ansa,ansb);
	if(ansa>ansb)
	{
		for(int i=1;i<=ansa;i++)
		{
			n[i]=a[ansa-i]-48;
		}
		for(int i=1;i<=ansb;i++)
		{
			n[i]+=b[ansb-i]-48;
		}
	}
	else
	{
		for(int i=1;i<=ansb;i++)
		{
			n[i]=b[ansb-i]-48;
		}
		for(int i=1;i<=ansa;i++)
		{
			n[i]+=a[ansa-i]-48;
		}	
	}
	for(int i=1;i<=sumn;i++)
	{
		if(n[i]>=10)
		{
			n[i]-=10;
			n[i+1]++;
		}
	}
	if(n[sumn+1]>0)
	{
		sumn++;
	}
	for(int i=sumn;i>=1;i--)
	{
		cout<<n[i];
	}
}
int main()
{
	cin>>a>>b;
	f(a,b);
	return 0;
}

标签:10,string,高精度,int,sumn,数组,加法,倒序
From: https://blog.csdn.net/yyds123456789max/article/details/144003748

相关文章

  • Java练习_时间加法与时间减法
    时间加法问题描述在程序中,经常要对时间进行操作,请定义实现一个时间类,来满足程序中的需要:(1)定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute),秒(second)。(2)为了保证数据的安全性,这三个成员变量应声明为私有。(3)为MyTime类定义构造方法,以方便创建对象时初始化成员变量。(4)为M......
  • Windows高精度计时器(适用短且占用性能的方式)
    QueryPerformanceCounter:获取当前的高精度计时器值QueryPerformanceFrequency:获取高精度计时器的频率[DllImport("Kernel32.dll")]privatestaticexternboolQueryPerformanceCounter(outlonglpPerformanceCount);[DllImport("Kernel32.dll")]privatestaticextern......
  • 高精度问题
     加法题目描述a+b输入描述一个m代表多少组数据每组两个数ab,空格隔开,每个数小于1000位输出描述a+b的和。。并换行。样例输入512345612345665432165432198765432112345678998765432112345678911111111111111111111111111111111111111222222222222222222222......
  • YOLOv11改进策略【YOLO和Mamba】| 2024 VM-UNet,高效的特征提取模块VSS block 二次创新
    一、本文介绍本文记录的是利用VM-UNet中的VSSblock优化YOLOv11的目标检测网络模型。VSSBlock与传统模块不同,它汲取了VMamba模型的优势,通过特定结构设计,在保证计算效率的同时,精准建模局部特征并学习长距离依赖,实现局部特征的高效处理与长距离依赖关系的有效学习。本文将其......
  • 蓝桥杯 2024 省赛 C++ B组 R 格式 (JAVA面向对象 高精度 纯api题解)
    解题思路:由于数位较大这里采用高精度,又因为高精度写起来比较麻烦所以这里直接采用JAVAapi中的高精度浮点数类型和高精度整数类型,应为高精度浮点数类型四舍五入较为麻烦所以这里改为手动四舍五入importjava.math.BigDecimal;importjava.math.BigInteger;importjava.util......
  • 为什么高精度项目的控制都选伺服?
    在现代工业自动化和高精度控制应用中,伺服系统以其卓越的性能和高稳定性,成为了行业中的重要选择。尤其是在需要精确控制运动位置、速度和加速度的应用场景中,伺服系统展现出了无与伦比的优势。一、伺服系统的基本原理伺服系统是一种通过反馈机制实现精确控制的自动控制系统。其......
  • 不用 + eval Function 实现加法
    You'reaskinghowtoimplementadditioninfrontendJavaScriptwithoutusingtheeval()function.Hereareafewways:1.Usingthe+operator(fornumbers):ThisisthestandardandmoststraightforwardwaytoaddnumbersinJavaScript.Makesure......
  • 北斗系统:构建天地一体化的高精度定位服务
    随着北斗卫星导航系统的全面建成,中国在全球卫星导航领域迈出了坚实的一步。北斗系统不仅提供了全天候、全天时的全球覆盖服务能力,更通过天地一体化的高精度增强服务系统技术,将民用定位精度提升到了新的高度。 北斗系统的高精度服务北斗系统的高精度服务能力,是通过其空......
  • 高精度计算器-Qt版
    代码widget.h文件#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<vector>#include<stack>usingnamespacestd;QT_BEGIN_NAMESPACEnamespaceUi{classWidget;}QT_END_NAMESPACEclassWidget:publicQWidget{Q_OBJEC......
  • 蓝桥杯备考冲刺必刷题(Python) | 548 时间加法
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】现在时间是a点b分,请问t分钟后,是几点几分?【输入】输入的第一行包含一个整数a。第二行包含一个整数b.第三行包含一个整数t......