文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Digit Sum 2 [AtCoder Grand Contest 021 A]

atcoder.jp


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);
	}

}