九度 1373
来源:互联网 发布:mac换行按键 编辑:程序博客网 时间:2024/05/17 04:47
题目来源:http://ac.jobdu.com/problem.php?pid=1373
- 题目描述:
亲们!!我们的外国友人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 51 1321 5531 99
- 样例输出:
1647
查找一个数以内1出现的次数可参考:
http://blog.csdn.net/hearthougan/article/details/21645859
#include <iostream>#include <cstring>#include <cstdio>using namespace std;typedef long long LL;LL fabs(LL a){ LL i = a >> 31; return i == 0 ? a : (~a + 1);}void Swap_Num(LL &a, LL &b){ if(a > b) { a = a ^ b; b = a ^ b; a = a ^ b; } return ;}LL CountOnes(LL n, LL kcount){ LL higernum, lowernum, curnum; LL factor = 1; while(n/factor) { higernum = n / (factor * 10); lowernum = n - (n/factor) * factor; curnum = (n/factor) % 10; switch( curnum ) { case 0: kcount += higernum * factor; break; case 1: kcount += higernum * factor + lowernum + 1; break; default: kcount += higernum * factor + factor; } factor *= 10; } return kcount;}LL Find_One(LL num, LL tmp){ while(num) { if(num%10 == 1) tmp++; num /= 10; } return tmp;}int main(){ LL a, b; LL ans1, ans2; while(~scanf("%lld %lld", &a, &b)) { Swap_Num(a, b); ans1 = CountOnes( a, 0 ); ans2 = CountOnes( b, 0 ); int tmp = Find_One(a, 0); int num = fabs(ans2 - ans1) + tmp; printf("%lld\n", num); } return 0;}
0 0
- 九度 1373
- 【九度OJ】:九度OJ 1050
- 【九度OJ】:九度OJ 1053
- 【九度OJ】:九度OJ 1056
- 【九度OJ】:九度OJ 1059
- 【九度OJ】:九度OJ 1206
- 人生九度
- 九度oj1181
- 九度oj1207
- 九度oj1182
- 九度o j1026
- 九度oj1186
- 九度oj1074
- 九度oj1127
- 九度oj1051
- 九度oj1197
- 九度oj1188
- 九度oj1195
- 【DFS】Generate Parentheses
- int 0x80系统调用的参数传递规则
- C++语言中的元类编程(四)
- ASCII意思
- 第二周作业第二题
- 九度 1373
- 数据传递型情景下事件机制与消息机制的架构设计剖析(一)
- java学习笔记-包
- 序列 (python)
- hdu2874 建树保存查找功能丰富的代码
- 实现《算法导论》里的快排
- 算法导论-用于不想交集合的数据结构(并查集)-kruskal最小生成树算法
- android 开发的学习路线
- Linux limits.conf配置说明