当前位置:   article > 正文

蓝桥杯备赛 | 洛谷做题打卡day4

蓝桥杯备赛 | 洛谷做题打卡day4

蓝桥杯备赛 | 洛谷做题打卡day4

学习高精度吧 ~

P1601 A+B Problem(高精)

题目描述

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

在这里插入图片描述

输入格式

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

输出格式

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

样例 #1

样例输入 #1

1
1
  • 1
  • 2

样例输出 #1

2
  • 1

样例 #2

样例输入 #2

1001
9099
  • 1
  • 2

样例输出 #2

10100
  • 1

学会利用新知,自己多试试并尝试积攒一些固定解答方案,debug,以下是我的代码 ~

#include<iostream>
using namespace std;
int a[1000001], b[1000001], c[1000001], j;
bool x = false;
char s[1000001], ss[1000001];
int main() {
	cin >> s >> ss;
	a[0] = strlen(s);
	b[0] = strlen(ss);//获取长度
	for (int i = 1; i <= a[0]; i++) a[i] = s[a[0] - i] - '0';
	for (int i = 1; i <= b[0]; i++) b[i] = ss[b[0] - i] - '0';//注意:将s,ss中的字符依次逆序转化为数字装入数组a,b中
	for (j = 1; j <= max(a[0], b[0]) + 1; j++) //这一行循环条件最好不要擅自更改,整体性理解
	{
		c[j] = a[j] + b[j];
		if (c[j] >= 10) {
			c[j] %= 10;
			a[j + 1]++;//a[j + 1]或b[j + 1]均可,这段是逆序处理进位问题,重在理解
		}
	}//模拟加法
	c[0] = j;//循环结束后,j即为数组最大长度+1
	if (c[j + 1] > 0) c[0]++;//特判进位
	for (int i = c[0]; i >= 1; i--) {//逆序输出(删除前导零)
		if (x == false && c[i] == 0) continue;//好奇这个continue的作用
		x = true;
		cout << c[i];
	}
	if (x == false) cout << 0;//一重保险
	printf("\n");//二重保险
	return 0;//三重保险
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

我的一些话

  • 关于高精度算法:学会利用新知,自己多试试并尝试积攒一些固定解答方案,大多数人的努力,其实还没有到拼天赋的程度。在一切未知之前,我们能做的便是享受当下并做自己喜欢且认为有意义的事情。

  • 总结来说思路很重要,多想想,多在草稿纸上画画,用测试数据多调试,debug后成功编译并运行出正确结果真的会感到很幸福!

  • 关于之前蓝桥杯备赛的路线和基本方法、要掌握的知识,之前的博文我都有写,欢迎大家翻阅自取~

  • 不管什么都要坚持吧,三天打鱼两天晒网无法形成肌肉记忆和做题思维,该思考的时候一定不要懈怠,今天就说这么多啦,欢迎评论留言,一起成长:)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/866268
推荐阅读
相关标签
  

闽ICP备14008679号