整数大小比较

GitHub跳转原题关系图返回列表

比较无符号 32 位的 x 与有符号 32 位的 y,把两边统一成 long long 再比,避免 C++ 混合符号比较的隐式转换陷阱。

OJ: roj

题目 ID: 1043

难度:入门

标签:入门输入输出python

创建: 2026-09-29 15:47

更新: 2026-10-04 23:24

题目描述

输入一行两个整数 x y(单个空格隔开),比较大小后输出一个字符:x>yx > y 输出 >,x=yx = y 输出 =,x<yx < y 输出 <。数据范围:0⩽x<2320 \leqslant x < 2^{32}(无符号 32 位),−231⩽y<231-2^{31} \leqslant y < 2^{31}(有符号 32 位)。

样例:输入 1000 100,输出 >。

思路

本题只有一个比较,考点是无符号/有符号混合比较的类型陷阱:C++ 里 unsigned 与 int 直接比较时,yy 会被隐式转成无符号数(如 −1-1 变成 42949672954294967295)导致方向判反。把 xx、yy 都读成 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;
}