您的位置:首页 > 其它

【2012 - 百度之星 / 初赛第一场 B:小小度刷礼品】

2012-06-02 11:09 302 查看

B:小小度刷礼品

查看

提交

提交记录

时间限制: 1000ms 内存限制: 65536kB描述
一年一度的百度之星又开始了,这次参赛人数创下了吉尼斯世界纪录,于是百度之星决定奖励一部分人:所有资格赛提交ID以x结尾的参赛选手将得到精美礼品一份。

小小度同学非常想得到这份礼品,于是他就连续狂交了很多次,提交ID从a连续到b,他想问问你他能得到多少份礼品,你能帮帮他吗?

输入第一行一个正整数T表示数据组数;
接下来T行,每行三个不含多余前置零的整数x,a,b (0 <=x <= 10^18, 1 <= a,b <= 10^18,a <= b)输出T行,每行为对应的数据情况下,小小度得到的礼品数样例输入
1
88888 88888 88888

样例输出
1

#include <iostream>
using namespace std;

//////////////////////////////////////////////////////////
// int CCalBit (int k)
int CCalBit(int k)
{
int count = 0;
while ( k )
{
count++;
k = k / 10;
}

return count;
}

//////////////////////////////////////////////////////////
// int CPowerTen(int k)
int CPowerTen(int k)
{
int sum = 1;
while ( k-- )
{
sum *= 10;
}

return sum;
}

//////////////////////////////////////////////////////////
// int CCalLeftStarter(int x, int num)
int CCalLeftStarter(int x, int num)
{
int result = num / CPowerTen(CCalBit(x));

int temp = num % CPowerTen( CCalBit(x) );

if (temp > x)
{
result++;
}

return result;
}

//////////////////////////////////////////////////////////
// int CCalRightEnder(int x, int num)
int CCalRightEnder(int x, int num)
{
int result = num / CPowerTen(CCalBit(x));

int temp   = num % CPowerTen(CCalBit(x));

if (temp < x)
{
result--;
}

return result;
}

int main()
{
int t;
cin >> t;
while ( t-- )
{
int x, a, b;
// input data
cin >> x >> a >> b;

// process it
int left_starter;
left_starter = CCalLeftStarter(x, a);
int right_ender;
right_ender = CCalRightEnder  (x, b);

int result = right_ender - left_starter + 1;

if (result < 0)
{
result = 0;
}

cout << result << endl;
// output for test

}

return 0;
}

// end
// ism
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: