高精度加法

文章详细讲解了如何用C++实现高精度加法,涉及字符串转换、数组操作及进位规则,提供了完整代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

高精度加法,相当于 a+b problem,不用考虑负数

输入格式

分两行输入。a,b \leq 10^{500}a,b≤10500。

输出格式

输出只有一行,代表 a+ba+b 的值。

输入输出样例

输入 1

1
1

输出 1

2

输入 2

1001
9099

输出 2

10100

说明/提示

20% 的测试数据,0≤a,b≤10^9;

40% 的测试数据,0≤a,b≤10^18。

10的18次方肯定是超出了long long的数据范围了,所以说,这道题就要用到高精度

高精度,就是用字符串来存储数,遍历字符串来进行运算

就用这道题来举例

加法,我们就得用字符串来模拟加法竖式

这道题的总体思路是:

输入字符串sa,sb,将字符串里面的每个数存入数组,用数组进行运算

由于加法是从低位到高位进行运算,所以 存入数组是要倒序存放

string sa,sb;
int a[20],b[20];
cin>>sa>>sb;
int la=sa.length();
int lb=sb.length();
for(int i=0;i<la;i++)
	a[la-1-i]=sa[i]-'0';
for(int i=0;i<lb;i++)
	b[lb-1-i]=sb[i]-'0';

 接下来就是运算环节

先定义一个c数组,用来存储运算结果

接着,我们要遍历a,b两个数组,相同位的数相加

中间有非常重要的一步——进位

进位其实非常简单,只需要在当前位数字大于10的时候向下一位进一,将本位减10就行了

if(c[i]>=10){
	c[i]-=10;
	c[i+1]=1;
}

最后输出是要注意:要将c数组倒序输出,以为是把两个数反过来算的

代码如下:

#include<bits/stdc++.h>
using namespace std;
string sa,sb;
int a[1001],b[1001],c[1002];
int main(){
	cin>>sa>>sb;
	int la=sa.length();
	int lb=sb.length();
	for(int i=0;i<la;i++)
		a[la-1-i]=sa[i]-'0';
	for(int i=0;i<lb;i++)
		b[lb-1-i]=sb[i]-'0';
	int lc=max(la,lb);
	for(int i=0;i<lc;i++){
		c[i]=a[i]+b[i]+c[i];
		if(c[i]>=10){
			c[i]-=10;
			c[i+1]=1;
		}
	}
	if(c[lc])lc++;
	for(int i=lc-1;i>=0;i--)cout<<c[i];
 	return 0;
} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值