P8869 [传智杯 #5 初赛] A-莲子的软件工程学

178 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详情

[传智杯 #5 初赛] A-莲子的软件工程学

题目背景

在宇宙射线的轰击下,莲子电脑里的一些她自己预定义的函数被损坏了。

对于一名理科生来说,各种软件在学习和研究中是非常重要的。为了尽快恢复她电脑上的软件的正常使用,她需要尽快地重新编写这么一些函数。

题目描述

具体而言,给定两个整数 a,ba,b,保证 b0b\neq 0。莲子要实现这样一个函数 fun(a,b)\operatorname{fun}(a,b) 来将 bb 的符号转移到 aa 上。

具体而言,fun(a,b)=sgn(b)×a\operatorname{fun}(a,b)=\operatorname{sgn}(b)\times |a|。其中,sgn(b)={1b>01b<0\operatorname{sgn}(b)=\begin{cases}1&b>0\\-1&b<0\end{cases}

换而言之:

  • 如果 bb 是正数,那么 fun(a,b)=+a=a\operatorname{fun}(a,b)=+|a|=|a|
  • 如果 bb 是负数,那么 fun(a,b)=a\operatorname{fun}(a,b)=-|a|

如果使用一个三维坐标系描述 fun(a,b)\operatorname{fun}(a,b),则应当如下图所示:

你只需输出 fun(a,b)\operatorname{fun}(a,b) 的值。

输入格式

  • 共一行两个整数 a,ba,b

输出格式

  • 共一行一个整数 fun(a,b)\operatorname{fun}(a,b) 的值。

样例 #1

样例输入 #1

-1 2

样例输出 #1

1

样例 #2

样例输入 #2

0 -4

样例输出 #2

0

样例 #3

样例输入 #3

-12345 -54321

样例输出 #3

-12345

提示

对于全部数据,保证 a,ba,b3232 位有符号整型范围内,并且 b0b \neq 0

题目分析

这题是传智杯B组的第一题,题意非常的简单,但是有个坑实在是太狗了,就是提示中的“保证a,b在32位有符号的整数类型”,很多人直接就是int肝了,但是因为比赛的时候服务器炸了,导致有很多人疯狂的提交,所以有以下的事情(doge):

image.png 传智杯,他真的我哭死(doge)

思路分析

现在有两种思路做,一种是用字符串来存,一开始我以为是时的32次方位,于是我就果断用string了
另一种就是使用long long,大整数来存,比较方便

string代码

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string a, b;
	cin >> a >> b;
	if (a[0] == '0') {
		cout << "0";
	}
	else {
		int pos = a.find('-');
		if (pos != -1)a.replace(0, 1, "");
		if (b[0] == '-') {
			cout << "-";
		}
		cout << a;
	}
	return 0;
}

long long代码

#include<iostream>
#include<cmath>
using namespace std;

typedef long long LL;

int main()
{
	LL a, b;
	cin >> a >> b;
	if (a == 0) {
		cout << "0";
	}
	else {
		if (b > 0)cout << abs(a);
		else cout << "-" << abs(a);
	}
	return 0;
}

PS:简单是简单,但是真的很坑,有的哥们爆int快哭了(大哭.jpg),虽然我一遍过~