ZZULIOJ 1798: 戴姆勒的求助【数学】



1798: 戴姆勒的求助

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


你可能感兴趣的:(ZZULIOJ 1798: 戴姆勒的求助【数学】)