2009-10-04 20:02:01來源不明

挑戰極限 Part 5:開立方根

作法 : 內建 OR 建表+二分搜尋

程式碼1為內建
程式碼2為建表+二分搜尋

此題原本應該是要用程式碼2的方式吧

結果被內建打敗了...如果N是大數的話 可能要來個大數二分搜尋了 呵呵

/*********************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
 unsigned long long int n;
 while(scanf("%llu",&n)==1)
     printf("%.0lf\n",pow(n,1/3.0));
  return 0;
}

/********************************************************/

#include<stdlib.h>  
#include<stdio.h>  
#include<math.h>  
unsigned long long int num[2642251],n;  
int index1(unsigned long long int n)     
{     
 int lower=0, mid, high=2642250;     
 int index=-1;     
    do   /*二分搜尋*/    
    {     
      mid=(lower+high)/2;     
      if(num[mid]<n)       lower=mid+1;     
      else if(num[mid]>n)  high=mid-1;     
      else   index=mid;     
    }     
    while(index==-1&&lower<=high);     
  return index;     
}    
main()  
{  
  unsigned long long int a,b,c;  
  for(a=1;a<=2642250;a++) num[a]=a*a*a;  
  while(scanf("%llu",&n)==1)  
          printf("%d\n",index1(n));  
  return 0;  
}