Problem Statement
Find the maximum possible sum of the digits (in base 10) of a positive integer not greater than N.
Constraints
- 1≤N≤1016
- N is an integer.
输出不大于N,位数最大和。
我们发现如果不是数不是x99…99的形式,最大位数和的数是(x-1)99…99.
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int DigitSum(LL n) {
int res = 0;
while(n > 0) {
res += n % 10;
n /= 10;
}
return res;
}
int main(void) {
LL n, temp;
cin >> n;
int ans = DigitSum(n);
temp = n;
LL cnt = 1;
while(temp >= 10) {
temp /= 10;
cnt *= 10;
}
ans = max(ans, DigitSum(n / cnt * cnt - 1));
cout << ans << endl;
return 0;
}