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

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

JOI 一次予選 2024 (第 3 回) B - 桁 (7Q, 難易度 1)

A 問題よりは少しレベルアップする!

問題概要

2 つの正の整数  A, B が与えられる。

 A + B が何桁になるかを求めよ。

制約

  •  1 \le A, B \le 499

解法

まず、 A + B の値を計算しましょう。その値を仮に  x としましょう。

残る問題は、この整数値  x が何桁なのかを求めることです。

方法 (1):大きさを見る

1 つの方法は、大きさを見ることです。「制約」を見ると、 A, B \le 499 とあります。これより、

 x = A + B \le 499 + 499 = 998

となります。つまり、整数値  x は最大でも 3 桁以下だということがわかります。よって、if 文を用いて、次のように考えれば良いでしょう。


  •  x \le 9 のとき:1 桁である
  •  10 \le x \le 99 のとき:2 桁である
  •  100 \le x \le 999 のとき:3 桁である

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B;
    cin >> A >> B;
    
    int x = A + B;
    if (x <= 9) cout << 1 << endl;
    else if (x <= 99) cout << 2 << endl;
    else if (x <= 999) cout << 3 << endl;
}

 

方法 (2):文字列に変換して、そのサイズを見る

もう 1 つの方法は、整数値  x を文字列に変換することです。たとえば、413 という整数値を文字列に変換すると、文字列 "413" となります。

C++ では、関数 to_string(x) を用いることで、整数値 x を文字列に変換できます。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B;
    cin >> A >> B;
    
    int x = A + B;
    cout << to_string(x).size() << endl;
}