AtCoder-3867
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.
Input is given from Standard Input in the following format:
N
OutputPrint the maximum possible sum of the digits (in base 10) of a positive integer not greater than N.
Sample Input 1100Sample Output 1
18
For example, the sum of the digits in 99 is 18, which turns out to be the maximum value.
Sample Input 29995Sample Output 2
35
For example, the sum of the digits in 9989 is 35, which turns out to be the maximum value.
Sample Input 33141592653589793Sample Output 3
137
题解:
其实只要比较原数所有位上的和与原数最大为减一其他为变为9后所有的和就可以啦。
AC代码为:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int Sum(long long n)
{
int res = 0;
while (n > 0)
{
res += n % 10;
n /= 10;
}
return res;
}
int main()
{
long long n, temp;
cin >> n;
int ans = Sum(n);
temp = n;
long long cnt = 1;
while (temp >= 10)
{
temp /= 10;
cnt *= 10;
}
ans = max(ans, Sum(n / cnt * cnt - 1));
cout << ans << endl;
return 0;
}