题解:因为我们可以让其变成 0 ~ a 的c***个数suma,和0 ~ b-1的c****个数sum,答案等于sumb-suma。
sum可以通过
1.得出位数xs
2.而后先将到该位数的c***个数取满
3.进行判断x是否在c*和(c+1)*-1之间,然后判断(如 c为2,c*为20 (c+1)*-1为29)。
#include<bits/stdc++.h>
#define ms(a) memset(a,0,sizeof(a));
typedef long long ll;
using namespace std;
const int N = 1e5 + 5;
ll get(ll x,ll c) {
ll cnt = 0;
ll xs = to_string(x).size();//转化为字符串算多少位
ll a = 1;
for (int i = 1; i <= xs; i++) {
cnt += a;
a *= 10;
}
a /= 10;
if (x < a * c) cnt -= a;
else if (x>=a*(c+1)-1){ }
else cnt -= a * (c + 1)-1 - x;
return cnt;
}
ll solve() {
ll a, b, c;
cin >> a >> b >> c;
if (b - a < 2)return 0;//特判
ll ans = get(b-1,c) - get(a,c);
return ans;
}
int main() {
int t;
cin >> t;
while (t--) {
cout << solve() << endl;
}
}