1的个数
2016-03-31 08:32
375 查看
题目描述
给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:1024 1025 1026 1027 1028 1029 1030 1031 1032
则有10个1出现在这些数中。
输入
输入不会超过500行。每一行有两个数a和b,a和b的范围是0 <= a, b <= 100000000。输入两个0时程序结束,两个0不作为输入样例。
输出
对于每一对输入的a和b,输出一个数,代表1出现的个数。
样例输入
1 10 44 497 346 542 0 0
样例输出
2 185 40
#include<stdio.h> long long solve(long long x) { if(x<0) return 0; long long t=0,p=1,temp=x; while(x>0) { if(x%10==0) t+=x/10*p; else { if(x%10==1) { if(x==temp) t+=x/10*p+1; else t+=temp%p+1+x/10*p; } else t+=(x/10+1)*p; } x/=10; p*=10; } return t; } int main() { long long a,b,t; while(scanf("%lld%lld",&a,&b)&&(a+b)) { if(a<b) { t=a; a=b; b=t; } printf("%lld\n",solve(a)-solve(b-1)); } return 0; }
相关文章推荐
- 1.m分解阶乘之和
- 2.几种递推数
- 3.欧拉函数
- 4.快速幂模m算法
- 5.扩展欧几里得&&中国剩余定理
- 6.数论_web
- Project Euler Problem 387 - Harshad Numbers - 深度优先
- 编程之美2015初赛A
- 数论题集
- 原根
- 阶与原根学习笔记
- HDU 1299 Diophantus of Alexandria
- Leftmost Digit(HDU 1060)
- Rightmost Digit(HDU 1061)
- Python-在奇数中寻找素数
- ZOJ 2674 Strange Limit 欧拉定理
- LeetCode-Palindrome Number
- 组合数求模总结
- Sicily 1047 Super Snooker
- 【数论】组合数求模