1798: 戴姆勒的求助
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 530 Solved: 70
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函数,请尝试加不同大小的小数修正来修正精度。
解题思路
因为每个立方数都是由(1,2,3.....)整数立方得来所以,只要先求出这个数的3次平方根,取整然后加1,和n比较就能得到答案,求出的数正好包含前面所有的能成为立方数的个数。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define LL long long
using namespace std;
int main()
{
int t;
LL n,sum;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
sum=pow(n,1.0/3);
sum+=1;
if(sum*sum*sum>n)
sum--;
printf("%lld\n",sum);
}
return 0;
}