比较无符号 32 位的 x 与有符号 32 位的 y,把两边统一成 long long 再比,避免 C++ 混合符号比较的隐式转换陷阱。
OJ: roj
题目 ID: 1043
难度:入门
标签:入门输入输出python
创建: 2026-09-29 15:47
更新: 2026-10-04 23:24
题目描述
输入一行两个整数 x y(单个空格隔开),比较大小后输出一个字符:>,=,<。数据范围:
样例:输入 1000 100,输出 >。
思路
本题只有一个比较,考点是无符号/有符号混合比较的类型陷阱:C++ 里 unsigned 与 int 直接比较时,long long 再比较,三种结果直接分支输出即可。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 15:47
# update_at: 2026-09-29 15:47
import sys
MARKS = '>=<' # 下标 0/1/2 依次对应 x>y、x=y、x<y
def solve() -> None:
x, y = map(int, sys.stdin.buffer.read().split()) # Python int 任意精度,32 位范围直接比
is_less = x < y
is_equal = x == y
print(MARKS[2 * is_less + is_equal]) # x<y 记 2,相等记 1,否则记 0
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-04 23:24
* update_at: 2026-10-04 23:24
*/
#include <cstdio>
// x 是无符号 32 位数,y 是有符号 32 位数,直接比较会出错:
// C++ 里 unsigned 与 int 比较时 y 会被隐式转成无符号数(如 -1 变成 4294967295),
// 所以必须先把两边统一成 ll 再比。
typedef long long ll;
ll x; // 无符号 32 位范围:0 <= x < 2^32
ll y; // 有符号 32 位范围:-2^31 <= y < 2^31
int main() {
scanf("%lld %lld", &x, &y);
if (x > y)
printf(">\n");
else if (x == y)
printf("=\n");
else
printf("<\n");
return 0;
}