1798: 戴姆勒的求助
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 542 Solved: 75
Submit Status Web Board
Description
戴姆勒最近比较喜欢平方数,自称掌握所有关于平方数的题。
灿灿听到后就不高兴了,立马要考考他。
聪明的灿灿要用立方数来难倒他。
他给戴姆勒一个数字n,问他有从1到n有多少个完全立方数(1,8,27,,,,)?
戴姆勒瞬间傻眼了(好可怜),于是请求你来帮助他,你能帮助他吗?
Input
输入第一行为一个整数T(0<T<=1000),表示有T组测试实例。
每组测试实例有一个数字n(1<=n<=10
18)。
Output
请输出从1到n中立方数的个数;
Sample Input
3 1 2 8
Sample Output
1 1 2
HINT
如果使用了pow函数,请尝试加不同大小的小数修正来修正精度。
解题思路::采用二分的思想写的,这样就不会超时了
代码如下:
#include<stdio.h>
long long num[1000000+10];
int main(){
int k=1;
long long n;
for(long long i=1;i<=1000000;i++){
num[k++]=i*i*i;
}
int t,flag;
scanf("%d",&t);
while(t--){
flag=-1;
scanf("%lld",&n);
int l=1;
int r=k;
while(l<=r){
int mid=(l+r)>>1;
if(num[mid]==n){
flag=mid;
break;
}
else if(num[mid]>n)
r=mid-1;
else l=mid+1;
}
if(flag!=-1)
printf("%d\n",flag);
else printf("%d\n",r);
}
return 0;
}