C++ 牛客网普及组第二次测试A

---恢复内容开始---

链接:https://www.nowcoder.com/acm/contest/165/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制: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。

输出描述:

如果a+b在long long范围之内,输出一行一个整数,表示a+b的结果;否则输出"hello, %lld\n",包含引号。
示例1

输入

复制
-9223372036854775808 9223372036854775807

输出

复制
-1
示例2

输入

复制
9223372036854775807 1

输出

复制
"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;
     
}

猜你喜欢

转载自www.cnblogs.com/FXY-180/p/9651147.html