Problem:
Score : 300 points

Problem Statement

Find the maximum possible sum of the digits (in base 10) of a positive integer not greater than N.

Constraints

1\leq N \leq 10^{16}

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the maximum possible sum of the digits (in base 10) of a positive integer not greater than N.

Sample Input 1

100

Sample Output 1

18

For example, the sum of the digits in 99 is 18, which turns out to be the maximum value.

Sample Input 2

9995

Sample Output 2

35

For example, the sum of the digits in 9989 is 35, which turns out to be the maximum value.

Sample Input 3

3141592653589793

Sample Output 3

137

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<math.h>

int main(){
  long N;
  scanf("%ld", &N);
  
  long n = N;
  int j = 0; //桁数
  while (n >= 1) {
    n = n/10;
    j++;
  }
  
  long m = N;
  int num[j];
  for (int i = 0;i < j; i++) {
    num[i] = ((long)(m/pow(10, j-1-i)))%10;
  }
  
  //はじめの各桁の和
  int sum = 0;
  for (int i = 0; i < j; i++) {
    sum += num[i];
  }
  
  //入れ換え操作
  for (int i = 0; i < j-1; i++) {
    if (num[i+1] != 9) {
      num[i] -= 1;
      num[i+1] = 9;
    }
  }
  
  //入れ替え後の和
  int subSum = 0;
  for (int i = 0; i < j; i++) {
    subSum += num[i];
  }
  
  
  //9への入れ替え後の数
  long newN = 0;
  for (int i = 0; i < j; i++){
    newN += num[i]*pow(10, j-i-1);
  }

  
  
  for (int i = j-1; i >= 0; i--) {
    if (num[i] == 8) {
      num[i] = num[i]+1;
      long finalN = 0;
      for (int k = 0; k < j; k++){
        finalN += num[k]*pow(10, j-k-1);
      }
      if (finalN > N) {
        num[i] = 8;
      }
    }
  }
  
  //修正後の数
  int ansSum = 0;
  for (int i = 0; i < j; i++) {
    ansSum += num[i];
  }
  
  printf("%d\n", ansSum);

  return 0;
  
}