题目描述:给定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; }