Digit Sum 2 [AtCoder Grand Contest 021 A]
N が与えられた時点で各桁の和が最大である場合と、そうでない場合に分けて考えます。
与えられた時点で最大であるような N とは、
・2桁以上で、先頭の数字以外が全て 9 である N
です。
これには 99, 199, 399999 などが該当します。
2桁以上としたのは、与えられた N が1桁なら、必ずその N は最大だからです。
この条件に当てはまらない N は最大ではありません。
最大でない N には 100, 2998, 300009 などが該当します。
この場合は、N の先頭の数字から 1 を引いたものに、9 を (Nの桁数-1)回 足せばよいです。
void solve () { String s = next(); boolean allNine = true; for (int i=1; i<s.length(); i++) { if (s.charAt(i) != '9') allNine = false; } if (allNine == true) { out.println((s.charAt(0)-'0')+(s.length()-1)*9); } else { out.println((s.charAt(0)-'0'-1)+(s.length()-1)*9); } }