描述
有甲乙丙三个人喜欢让别人猜数字。他们会给别人一些提示,好让别人能够更好地猜出他们想的数字。甲喜欢告诉别人这个数字比a大,乙喜欢告诉别人这个数字比b小,丙喜欢告诉别人这个数字的首位数是c。当然这些条件可能并不充分,有可能有好多个数字都是满足条件的,也有可能是无解的。现在想要知道的是,根据a、b、c三个值,到底有多少个整数是满足条件的?
输入
1个正整数n,表示测试案例的数量。
每组测试案例有三个整数a、b、c(0<=a<=10亿,0<=b<=10亿,1<=c<=9),分别代表甲乙丙三个人说的提示。
输出
针对每组案例,输出满足条件(大于a,且小于b,且首位数是c)的整数数量。每组案例输出后都要换行。
样例输入
2
5 10 4
0 20 1
样例输出
0
11
HINT
第一组案例中,>5且<10且首位为4的数字是不存在的,所以输出0。
第二组案例中,可满足条件的数字有1、10、11、12、…、19,共11个。
#include<iostream>
using namespace std;
int main()
{
long long int n;
cin >> n;
while (n--)
{
long long int a, b, c, cnt = 0, d = 1;
//d代表0-10范围内以c开头的数字个数
cin >> a >> b >> c;
while (c < b)
{
if (c > a&& c + d <= b)
//如69-80,以7开头有10个
{
cnt += d;
}
if (c > a&& c + d > b)
//如69-79,被b(79)阻断
{
cnt += b % d;
}
if (c <= a &&c+d>a&& c + d <= b)
//如70-81,以7开头从a开始
{
cnt += d - a % d - 1;
}
if (c <= a &&c+d>a&& c + d > b)
//如70-79,从a开始被b阻断
{
cnt += b % d - a % d - 1;
}
d *= 10;
//10-100…范围内以c开头的数字个数
c *= 10;
}
if (a == b)
{
cnt == 0;
}
cout << cnt << endl;
}
return 0;
}