けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 059 B - Comparison (7Q, 灰色, 200 点)

巨大な整数値の大小比較の問題

問題概要

2 つの正の整数  A, B(101 桁以下)が与えられるので、その大小比較をせよ。

考えたこと

 A, B は 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");
}