二分查找
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); 31 else printf("9 "); 32 } 33 }