题目链接
题目描述
给定一个正整数 n
,求 sqrt(n)
的整数部分,即对 sqrt(n)
向下取整的结果。
输入描述:
在一行中输入一个整数 n
。
输出描述:
输出一个整数,表示 sqrt(n)
向下取整后的值。
解题思路
本题的核心是计算一个数的平方根并提取其整数部分。
- 读取输入:从标准输入读取一个正整数
n
。 - 计算平方根:使用标准库中提供的数学函数来计算平方根。
- 在 C++ 中是
sqrt()
,需要包含<cmath>
头文件。 - 在 Java 中是
Math.sqrt()
。 - 在 Python 中是
math.sqrt()
或直接使用n ** 0.5
。 这些函数通常返回一个浮点数(如double
)。
- 在 C++ 中是
- 向下取整:题目要求的是平方根的整数部分,这等同于对计算结果向下取整(floor)。将浮点数结果直接转换为整数类型(如 C++/Java 中的
(int)
或 Python 中的int()
)通常会截断小数部分,对于正数而言,这恰好实现了向下取整的效果。 - 输出结果:将得到的整数部分输出。
代码
#include <iostream>
#include <cmath> // 需要包含 cmath 以使用 sqrt
using namespace std;
int main() {
long long n;
cin >> n;
// 计算平方根
double root = sqrt(n);
// 将浮点数结果转换为整数,实现向下取整
cout << (long long)root << endl;
return 0;
}
import java.util.Scanner;
import java.lang.Math; // Math 类包含 sqrt 方法
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
// 计算平方根
double root = Math.sqrt(n);
// 将 double 转换为 long,实现向下取整
System.out.println((long)root);
}
}
import math # 导入 math 模块以使用 sqrt
# 读取输入
n = int(input())
# 计算平方根
root = math.sqrt(n)
# 将浮点数结果转换为整数,实现向下取整
print(int(root))
算法及复杂度
- 算法:标准库数学函数。
- 时间复杂度:
- 调用
sqrt
函数通常被视为一个常数时间复杂度的操作。 - 空间复杂度:
- 仅需常数空间存储变量。