UVA465 Overflow 题解

· · 题解

作为 Python 党,一看到要判断大于 int 范围且不知道是不是小于 unsigned long long 的数就想着用 Python

偷懒大法——Python

废话不多说,开始解题:

题目大意

给定两个正整数和两数之间的符号,为 +\times

判断这两个数中的一个数或者运算结果是否大于 int 范围。

解题思路

众所周知,int 的范围是 2^{31} - 12147483647

这样一来就好办了,可以一直输入直到 End Of File,并判断,写一个 while True 就解决了。

本题使用 Python 解题的难点是如何判断 EOF?

众所周知,Python 有着一堆 Error 类,一不小心就会引发并终止程序,在 OJ 上显示为 RE,所以很难判断具体为哪个错误类。

Python 不像 C++ 一样可以直接用 != EOF 判断输入是否为 EOF,需要用 try except 语句实现。

本题坑点(英语好的人自动跳过):

一个输入可以输出 0 \sim 3 行判断,不是固定输出一行。

代码

献上简洁的 Python 代码:

import sys#可把 break 换成 sys.exit()

MAX = 2147483647#2^31-1

while True:#无限循环直到 EOFError
    try:#try ... except ...
        s = input()#尝试输入
    except EOFError:#如果引发错误
        break#结束程序,也可使用 sys.exit()
    print(s)
    l = list(s.split())#列表存储
    if int(l[0]) > MAX:#注意转换类型
        print("first number too big")
    if int(l[2]) > MAX:#可以两个数都超 int,用 if
        print("second number too big")
    if l[1] == "+" and int(l[0]) + int(l[2]) > MAX:#注意有两个条件
        print("result too big")
    elif l[1] == "*" and int(l[0]) * int(l[2]) > MAX:#if 也可以
        print("result too big")