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

POJ 1019 数学题

时间:2014-12-14 00:28:52      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   div   log   bs   

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 using namespace std;
 5 
 6 int sum[20];
 7 //sum[i]表示尾数为i的组最大可达到的数字个数
 8 void init()
 9 {
10     sum[0] = 0;
11     sum[1] = 9;
12     sum[2] = 189;
13     sum[3] = 2889;
14     sum[4] = 38889;
15     sum[5] = 488889;
16     sum[6] = 5888889;
17 }
18 
19 //找到最后对应的组数属于的范围是在多少位的整数上,返回整数的位数
20 int get_bit(int &n)
21 {
22     for(int i = 0 ; i<6 ; i++){
23         if(n > sum[i] && n <= sum[i+1])
24         {
25             n -= sum[i];
26             return i+1;
27         }
28     }
29     return -1;
30 }
31 //返回g这个组中对应的数字的个数
32 int get_num_of_group(int g)
33 {
34     int t = 10;
35     int k = 1;
36     int ret = 0;
37     while(g >= t){
38         ret += t/10*9*k;
39         t *= 10;
40         k++;
41     }
42     ret += (g - t/10 + 1) * k;
43     return ret;
44 }
45 
46 int main()
47 {
48     int T;
49     //cout<<get_num_of_group(100)<<endl;
50     scanf("%d" , &T);
51     init();
52     while(T--){
53         int n;
54         scanf("%d" , &n);
55         int group = 1;
56         int cnt = 1;
57         //group表示第几组,cnt表示对应组中含有的数字的个数
58         while(1){
59             if(n <= cnt) break;
60             n -= cnt;
61             group++;
62             cnt = get_num_of_group(group);
63         }
64         //cout<<"group"<<group<<" "<<n<<endl;
65         int t = get_bit(n);
66         //cout<<"t  " <<t<<endl;
67         int st;
68         //st表示从几位数字开始找起,如st = 10,表示最后这个点属于10-99范围
69         if(t < 0) st = 1 , t = 1;
70         else
71         {
72             st = 1;
73             for(int i=1 ; i<=t-1 ; i++)
74                 st *= 10;
75 
76         }
77         //cout<<"st  " <<st<<endl;
78         while(n > t){
79             n -= t;
80             st++;
81         }
82         n = t + 1 - n;
83         int ans = st%10;
84         for(int i=1 ; i<=n ; i++){
85             ans = st%10;
86             st /= 10;
87         }
88         printf("%d\n" , ans);
89     }
90    // cout<<9 + 2*90 + 3*900<<endl;
91     return 0;
92 }

 

POJ 1019 数学题

标签:style   blog   io   color   sp   for   div   log   bs   

原文地址:http://www.cnblogs.com/CSU3901130321/p/4162044.html

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