巨大な整数値の大小比較の問題
問題概要
2 つの正の整数 (101 桁以下)が与えられるので、その大小比較をせよ。
考えたこと
は 100 桁にも及ぶことがあるので、long long
型などで受け取ることもできない。そこで、string
型で受け取ろう。このとき、大小比較は次のように整理できる。
- どちらかの桁数が大きいとき (= 文字列のサイズが異なるとき)
- 桁数が大きい方が、数値としても大きい
- 桁数が等しいとき
- この場合は、文字列としての辞書順が大きい方が、数値としても大きい
注意
なお、単純に「辞書順比較するだけ」ではダメな例がある。たとえば、
- A = 11
- B = 9
のとき、文字列の辞書順では A の方が小さいが、数値としては B の方が小さい。
コード
#include <bits/stdc++.h> using namespace std; int main() { string A, B; cin >> A >> B; if (A.size() < B.size()) puts("LESS"); else if (A.size() > B.size()) puts("GREATER"); else if (A < B) puts("LESS"); else if (A > B) puts("GREATER"); else puts("EQUAL"); }