[Jobdu] 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
- 题目描述:
-
亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他。问题是:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
- 输入:
-
输入有多组数据,每组测试数据为一行。
每一行有两个整数a,b(0<=a,b<=1,000,000,000)。
- 输出:
-
对应每个测试案例,输出a和b之间1出现的次数。
- 样例输入:
-
0 5 1 13 21 55 31 99
- 样例输出:
-
1 6 4 7
- 答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-8096-1-1.html
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int a, b; 6 7 int getOne(int n) { 8 int cnt = 0; 9 int m = n; 10 int base = 1; 11 while (m > 0) { 12 cnt += m/10 * base; 13 if (m%10 > 1) { 14 cnt += base; 15 } else if (m%10 == 1) { 16 cnt += n%base + 1; 17 } 18 m /= 10; 19 base *= 10; 20 } 21 return cnt; 22 } 23 24 int main() { 25 while (cin >> a >> b) { 26 if (a > b) swap(a, b); 27 cout << getOne(b) - getOne(a-1) <<endl; 28 } 29 return 0; 30 } 31 32 /************************************************************** 33 Problem: 1373 34 User: hupo250 35 Language: C++ 36 Result: Accepted 37 Time:40 ms 38 Memory:1520 kb 39 ****************************************************************/