top1编程
← 返回题目
题解

判断两个大整数大小

1 条题解

  • 0
    @ 2026-8-3 18:39:20

    解题思路

    两个大整数位数最多 2000,不能直接比大小,但比较规律很简单:

    1. 位数不同:位数多的数一定大。
    2. 位数相同:从最高位往最低位一位一位比,谁先出现更大的数字,谁就大。

    题目问的是第一个数是否小于第二个,满足就输出 YES。

    参考代码

    #include <iostream>
    using namespace std;
    
    char a[2005], b[2005];
    
    int main() {
        cin >> a >> b;
        // 求两个数的位数
        int la = 0, lb = 0;
        while (a[la]) la++;
        while (b[lb]) lb++;
    
        int less = 0;   // 1表示a<b,0表示a>=b
        if (la < lb) less = 1;          // 位数短的一定小
        else if (la > lb) less = 0;     // 位数长的一定大
        else {
            // 位数相同,从最高位往最低位逐个比较
            for (int i = 0; i < la; i++) {
                if (a[i] != b[i]) {
                    less = (a[i] < b[i]) ? 1 : 0;
                    break;
                }
            }
        }
        if (less) cout << "YES" << endl;
        else cout << "NO" << endl;
        return 0;
    }
    

    复杂度分析

    设较长的位数为 n,最多逐位比较 n 次,时间复杂度 O(n);额外空间复杂度 O(n)。

    • 1