float 类型由 1 位符号位、8 位指数和 23 位尾数构成,能表示大约 6-7 位十进制有效数字;

double 类型由 1 位符号位、11 位指数和 52 位尾数构成,能表示大约 15-16 位十进制有效数字;

long double 类型提供比 double更高的精度和范围,具体大小和实现因平台而异,精度约 18-19 位十进制有效数字。

这里使用 floorl(long double)sqrtl(long double) 函数以实现:

#include <stdio.h>
#include <math.h>

int main() {
    int n;
    scanf("%d\n", &n);
    long long b;
    while (n--) {
        scanf("%lld\n", &b);
        printf("%lld\n", (long long)floorl(sqrtl(b)));
    }
    return 0;
}