C++ 牛客网普及组第二次测试A
---恢复内容开始---
链接:https://www.nowcoder.com/acm/contest/165/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
牛牛刚学习了输入输出,他遇到了一道这样的题目。
输入2个整数a和b
保证输入的a和b在long long范围之内,即满足
-9223372036854775808 <= a, b <= 9223372036854775807
计算a+b的值,即这两个数字的和。
如果a+b在long long范围之内,即满足
-9223372036854775808 <= a + b <= 9223372036854775807
那么输出一行一个整数表示a+b的结果。
如果a+b不在long long范围之内,即越界了,那么输出"hello, %lld\n",包含引号。
具体可以参见样例。
保证输入的a和b在long long范围之内,即满足
-9223372036854775808 <= a, b <= 9223372036854775807
计算a+b的值,即这两个数字的和。
如果a+b在long long范围之内,即满足
-9223372036854775808 <= a + b <= 9223372036854775807
那么输出一行一个整数表示a+b的结果。
如果a+b不在long long范围之内,即越界了,那么输出"hello, %lld\n",包含引号。
具体可以参见样例。
输入描述:
输入只有一行,包含用空格分开的两个整数,表示a和b。
输出描述:
如果a+b在long long范围之内,输出一行一个整数,表示a+b的结果;否则输出"hello, %lld\n",包含引号。
备注:
正确计算a+b可以得到50分
正确输出"hello, %lld\n"也可以得到50分
这道题看似是一道高精度计算,但是我们并不需要利用高精度(主要是自己考试的时候写不出来。。。。。)
所以我们要作的巧妙一些。
首先根据题目要求定义一个long long 的类型,随后,我们就可以直接进行判断了。
因为计算机在你的数越界了以后,就会输出一个负整数,所以我们只需要判断A+B是不是最后相加成了一个负整数,所以我们的问题也就迎刃而解了。
同样的,对于两个负数相加的时候,只需要判断计算的结果是不是一个正数。
就是这样对于判断的过程就解决了。
但是。。
在我们要输出"hello, %lld\n"的时候,我们的问题又来了,因为“” 是不容易输出的。
而且\也会代表着换行,会出现编译错误。
解决方法也不难,我们只需要运用一下char()就可以了。
char(34)=" char(92)=\
示范如下:
#include<bits/stdc++.h>//万能头文件 using namespace std; int main() { int n; cin>>n; cout<<char(n); }
本题代码:
#include<bits/stdc++.h> using namespace std; long long a,b,n,m,sum=9223372036854775807,ans=-9223372036854775808; int main() { cin>>a>>b; if((a>0&&b>0&&a+b<0)||(a<0&&b<0&&a+b>=0)) { cout<<char(34)<<"hello, %lld"<<char(92)<<"n"<<char(34); exit(0); } else cout<<a+b; }