NYOJ 514 1的个数
时间:2014-04-30 22:26:39
收藏:0
阅读:198
1的个数
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
给你两个数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
-
十进制数中1的个数!
-
AC码:
-
#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; }
评论(0)