文字列として処理した方が楽。
問題概要
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; }