列表

详情


NC14531. 数圈圈

描述

tabris有一个习惯,无聊的时候就会数圈圈,无论数字还是字母。
现在tabris更无聊啦,晚上睡不着觉就开始数羊,从a只数到b只。
顺便还数了a到b之间有多少个圈。

但是tabris笨啊,虽然数羊不会数错,但很可能数错圈的个数。
但是tabris很难接受自己笨这个事实,所以想问问你他一共应该数出多少个圈,这样tabris才好判断他到底笨不笨啊。 

输入描述

输入一个T,表示数据组数
每组测试数据包含两个正整数a,b。
T∈[1,1000]
a,b∈[1,1014]

输出描述

每组数据输出结果,并换行。

示例1

输入:

11
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
1 100

输出:

0
0
0
1
0
1
0
2
1
1
111

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 9ms, 内存消耗: 384K, 提交时间: 2017-12-10 23:11:27

#include<iostream>
using namespace std;
long long int f(long long int n,long long int x){
	long long int ans=0;
	for(long long int i=1,k;k=n/i;i=i*10){
		long long int left=k/10;
		if(x==0){
			if(left!=0) left--;
			else break; 
		}
		ans+=left*i;
		int cur=k%10;
		if(cur>x){
			ans+=i;
		}
		else if(cur==x)ans+=n-k*i+1;
	}
	return ans;
}
int main(){
	long long int n;
	cin>>n;
	while(n--){
		long long int a,b;
		cin>>a>>b;
		a--;
		cout<<f(b,0)+f(b,4)+f(b,6)+f(b,8)*2+f(b,9)-(f(a,0)+f(a,4)+f(a,6)+f(a,8)*2+f(a,9))<<endl;
	}
}

上一题