记:输出某范围内某位固定数开头的数字个数

描述
有甲乙丙三个人喜欢让别人猜数字。他们会给别人一些提示,好让别人能够更好地猜出他们想的数字。甲喜欢告诉别人这个数字比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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值