题解
判断两个大整数大小
1 条题解
-
0
解题思路
两个大整数位数最多 2000,不能直接比大小,但比较规律很简单:
- 位数不同:位数多的数一定大。
- 位数相同:从最高位往最低位一位一位比,谁先出现更大的数字,谁就大。
题目问的是第一个数是否小于第二个,满足就输出 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