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
1 #include <iostream> 2 using namespace std; 3 4 ////////////////////////////////////////////////////////// 5 // int CCalBit (int k) 6 int CCalBit(int k) 7 { 8 int count = 0; 9 while ( k ) 10 { 11 count++; 12 k = k / 10; 13 } 14 15 return count; 16 } 17 18 ////////////////////////////////////////////////////////// 19 // int CPowerTen(int k) 20 int CPowerTen(int k) 21 { 22 int sum = 1; 23 while ( k-- ) 24 { 25 sum *= 10; 26 } 27 28 return sum; 29 } 30 31 ////////////////////////////////////////////////////////// 32 // int CCalLeftStarter(int x, int num) 33 int CCalLeftStarter(int x, int num) 34 { 35 int result = num / CPowerTen(CCalBit(x)); 36 37 int temp = num % CPowerTen( CCalBit(x) ); 38 39 if (temp > x) 40 { 41 result++; 42 } 43 44 return result; 45 } 46 47 ////////////////////////////////////////////////////////// 48 // int CCalRightEnder(int x, int num) 49 int CCalRightEnder(int x, int num) 50 { 51 int result = num / CPowerTen(CCalBit(x)); 52 53 int temp = num % CPowerTen(CCalBit(x)); 54 55 if (temp < x) 56 { 57 result--; 58 } 59 60 return result; 61 } 62 63 int main() 64 { 65 int t; 66 cin >> t; 67 while ( t-- ) 68 { 69 int x, a, b; 70 // input data 71 cin >> x >> a >> b; 72 73 // process it 74 int left_starter; 75 left_starter = CCalLeftStarter(x, a); 76 int right_ender; 77 right_ender = CCalRightEnder (x, b); 78 79 int result = right_ender - left_starter + 1; 80 81 if (result < 0) 82 { 83 result = 0; 84 } 85 86 cout << result << endl; 87 // output for test 88 89 } 90 91 return 0; 92 } 93 94 // end 95 // ism