ZZULIOJ--1798

1798: 戴姆勒的求助

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 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;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         



你可能感兴趣的:(ZZULIOJ--1798)