挑戰極限 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;
}
下一篇:不幸的你