码迷,mamicode.com
首页 > 其他好文 > 详细

1的个数(数学)

时间:2015-10-24 11:28:28      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

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
来源
heroj
题解:坑了一早上。。
代码:
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int p[20]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
 5 int get1(int x){
 6     int sum=0,k=0;
 7     int t=x;
 8     while(t)  
 9     {  
10      if(t%10>1) 
11      sum+=p[k];  
12         else if(t%10==1) 
13         sum+=x%p[k]+1;  
14         
15         sum+=t%10*k*p[k-1];  
16         
17         t/=10;
18         k++;  
19     }  
20     return sum;
21 }
22 int main(){
23     int a,b;
24     while(scanf("%d%d",&a,&b),a|b){
25         if(a>b)swap(a,b);
26         int ans=get1(b)-get1(a-1);
27         printf("%d\n",ans);
28     }
29     return 0;
30 }

 

1的个数(数学)

标签:

原文地址:http://www.cnblogs.com/handsomecui/p/4906314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!