思路,每次只计算到了当前位的时候,当前位为2的时候有多少可能的数
class Solution {
public:
int numberOf2sInRange(int n) {
if(n < 2){
return 0;
}else if(n <= 10){
return 1;
}
long long xl;
long long xr;
long long xm;
int an = 0;
for(long long i = 1; ; i *= 10){
xl = n / i;
if(xl == 0){
break;
}
xm = xl % 10;
xl /= 10;
xr = n % i;
if(xl == 0){
if(xm > 2){
xr = i;
an += xr;
}else if(xm == 2){
an += xr + 1;
}
}else{
if(xm > 2){
xr = i;
an += xr;
}else if(xm == 2){
an += xr + 1;
}
xr = i;
an += xl * xr;
}
// cout << xl << " " << xr << " " << an << endl;
}
return an;
}
};



