PAT (Basic Level) Practice 1011 A+B 和 C

題目

給定區間 [231,231][−2​^{31}​​,2​^{31}​​] 內的 3 個整數AABBCC,請判斷 A+BA+B 是否大於 CC

輸入格式:

輸入第 1 行給出正整數 T(10)T (≤10),是測試用例的個數。隨後給出 TT 組測試用例,每組佔一行,順序給出 AABBCC。整數間以空格分隔。

輸出格式:

對每組測試用例,在一行中輸出 Case #X: true 如果A+B>CA+B>C,否則輸出 Case #X: false,其中 X 是測試用例的編號(從 11 開始)。

輸入樣例:

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

輸出樣例:

Case #1: false
Case #2: true
Case #3: true
Case #4: false

思路(2020-4-12 00:53:40)

  1. 15分完全白給。本來看到這個題,我第一反應是要把大數加法拿出來了。結果一看,給定區間 [231,231][−2​^{31}​​,2​^{31}​​],double都有8個字節64位了,難道還有個什麼反碼補碼卡我之類的?
  2. double在小數可能不是精確的,會被近似成2k2^k,小數部分kk小於0。但是在整數部分,存儲是類似a1×20+a2×21+a3×22++a64×263{a_1} \times {2^0} + {a_2} \times {2^1} + {a_3} \times {2^2}{\rm{ + }} \cdot \cdot \cdot {\rm{ + }}{a_{64}} \times {2^{63}},是精確的。
  3. 計組學太久,記不牢,坐等dalao出來指正。
  4. 直接判斷輸出。

答案1(2020-4-12 01:04:50)

#include <iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	double a,b,c;
	for (int i = 1 ; i <= n ; i++)
	{
		cin >> a >> b >> c;
		if(a + b > c)
		{
			cout << "Case #" << i << ": true";
		}
		else 
		{
			cout << "Case #" << i << ": false";
		}
		cout << endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章