AtCoder Grand Contest 021

目標: 300点を速解きする.
1WAしたので速くはないですね. B以降は着手してないです.

A - Digit Sum 2

i桁目を9にしてi+1桁目から1引く, 出来ないなら桁借りする.
これを繰り返す. 出来た数の各桁を足して答え.

#include <bits/stdc++.h>

using namespace std;

string n;

void diff(int i) {
  if(n[i] == '0') {
    n[i] = '9';
    diff(i - 1);
  }
  else {
    n[i]--;
  }
}

int main(void) {
  cin >> n;

  if(n.length() == 1) {
    cout << n << endl;
    return 0;
  }
  for(int i = n.length() - 1; i > 0; i--) {
    if(n[i] != '9') {
      n[i] = '9';
      diff(i - 1);
    }
  }

  int ans = 0;
  for(int i = 0; i < n.length(); i++) {
    ans += n[i] - '0';
  }

  cout << ans << endl;
}