1. 程式人生 > >C++ 牛客網普及組第二次測試A

C++ 牛客網普及組第二次測試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; }