Official

A - Not Overflow Editorial by mechanicalpenciI


問題文の指示通り、入力を整数で受け取って、\(-2^{31}\) 以上 \(2^{31}\) 未満であるかを判定すればよいです。 \(32\) bit の符号付き整数型では \(2^{31}\) より大きい数はもちろん、 \(2^{31}\) 自身もオーバーフローしてしまう事に注意してください。

c++による実装例:

#include <bits/stdc++.h>
using namespace std;

int main(void) {
	long long n;
	long long m = (long long)1 << 31;
	//long long m = 1 << 31; では右辺が (int)1<<31 として計算されるためオーバーフローし(=-(2 の31 乗)になります)、その値が long long 型に直され m に代入されてしまいます。
	//long long m = 2147483648; は問題ありません
	cin >> n;
	if ((-m <= n) && (n < m))cout << "Yes" << endl;
	else cout << "No" << endl;
	return 0;
}

pythonによる実装例:

n=int(input())
if -2**31<=n and n<2**31:
    print("Yes")
else: 
    print("No")

posted:
last update: