解析
首先设(n)有(l)位,
那么对于前(l-1)位,(0)~(9)都是要选上的,
而对于最高位上的数(x),(1)~(x-1)也是要选上的.
到这里就有了(10*(l-1)+x-1)
而我们还要考虑最高位的数(x)能不能省(比如说样例就能省).
设一个数(sum)有(l)位,每一位都为(x),
如果省掉的话,我们能表示的数就一定小于(sum),
因为(sum)有一位一定表示不出.
因此我们只需要判断(n)与(sum)的大小关系即可.
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#define filein(a) freopen(a".cpp","r",stdin)
#define fileout(a) freopen(a".cpp","w",stdout);
using namespace std;
inline int read(){
int sum=0,f=1;char c=getchar();
while((c<'0'||c>'9')&&c!=EOF){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9'&&c!=EOF){sum=sum*10+c-'0';c=getchar();}
return sum*f;
}
const int N=100001;
int n,m;
char s[N];
int main(){
cin>>s;n=strlen(s);
int ans=(n-1)*10+s[0]-'1',ok=1;
for(int i=0;i<n-1;i++){
if(s[i+1]<s[i]){ok=0;break;}
else if(s[i+1]>s[i]) break;
}
ans+=ok;
printf("%d
",ans);
return 0;
}