题目描述:给定n,求1-n中有几个数字满足各位数上的数相同。
统计位数len和最高位h,构造位数和n相同的数hh,hh各位数上都是h,比较n和hh,n小了就--h;
ans=h+9*(len-1).
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t,len,n,h,cnt,k,flag,hh;
cin>>t;
while(t--)
{
cin>>n;
len=0,cnt=1;
k=n;
while(k)
{
++len;
k/=10;
cnt*=10;
}
cnt/=10;
h=n/cnt;//取最高位数
k=n;
flag=1;
hh=0;//判断能不能构成hhhhhh...
for(int i=1;i<=len;++i)
{
hh=hh*10+h;
}
if(n<hh) --h;
//cout<<n<<' '<<hh<<endl;
cout<<h+9*(len-1)<<endl;
}
//getchar();getchar();
return 0;
} 


京公网安备 11010502036488号