文字列として処理した方が楽。
問題概要
3 桁の正の整数 が与えられる。これらの整数の桁和の最大値を求めよ。
制約
整数 はそれぞれ文字列として受け取った方が楽だと思われる。そうすると、
たとえば、3 桁の整数を表す文字列 A について
- 百の位の値:
A[0] - '0' - 十の位の値:
A[1] - '0' - 一の位の値:
A[2] - '0'
と表せる。ここで、- '0' というように '0' を引いているのは、char 型の '3' が表す値は 3 ではないためだ。処理系にもよるが、多くの処理系では、次のようになっている。
| 文字 | 値 |
|---|---|
| '0' | 48 |
| '1' | 49 |
| '2' | 50 |
| '3' | 51 |
| '4' | 52 |
| '5' | 53 |
| '6' | 54 |
| '7' | 55 |
| '8' | 56 |
| '9' | 57 |
よって、'3' を 3 に変換するためには、'0' (= 48) を引けばよいことが見て取れる。
#include <bits/stdc++.h> using namespace std; int main() { string A, B; cin >> A >> B; int asum = (A[0] - '0') + (A[1] - '0') + (A[2] - '0'); int bsum = (B[0] - '0') + (B[1] - '0') + (B[2] - '0'); cout << max(asum, bsum) << endl; }