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];
  }
  
  if (9*j == sum) {
    printf("%d\n", 9*j);
  } else {
    
    //入れ換え操作
    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;
  
}