HDU 1597 find the nth digit (二分查找)

二分查找

 1 #include<stdio.h>
 2 __int64 a[65555];
 3 void init()
 4 {
 5     a[0]=0;
 6     for(int i=1;i<65537;i++)
 7     {
 8         a[i]=a[i-1]+i;
 9     }
10 }
11 int search(int n,int low,int high)
12 {
13     int temp=(low+high)/2;
14     if(n==a[temp]) return temp-1;
15     if(low>=temp) return temp;
16     if(n>a[temp]) return search(n,temp,high);
17     if(n<a[temp]) return search(n,low,temp); 
18 }
19 int main()
20 {
21     int k,flag,n; 
22     init();   
23     scanf("%d",&k);
24     while(k--)
25     {
26         scanf("%d",&n);
27         int temp=search(n,1,65536);
28         n-=a[temp];
29         n%=9;
30         if(n) printf("%d\n",n);     
31         else printf("9\n");     
32     }
33 }

 

posted on 2014-05-15 18:24  >_<  阅读(142)  评论(0编辑  收藏  举报

导航