首页 > 试题广场 >

平方根

[编程题]平方根
  • 热度指数:36906 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个正整数 n,求 \sqrt{n} 的整数部分,即对 \sqrt{n} 向下取整的结果。

\hspace{15pt}例如,\sqrt{5}=2.236\ldots 向下取整后为 2\sqrt{16}=4.000\ldots 向下取整后为 4

输入描述:
\hspace{15pt}在一行中输入一个整数 n \left(1 \leqq n \leqq 10^9\right)


输出描述:
\hspace{15pt}输出一个整数,表示 \sqrt{n} 向下取整后的值。
示例1

输入

5

输出

2

说明

\sqrt{5}\approx2.236,向下取整后为 2
示例2

输入

16

输出

4

说明

\sqrt{16}=4.000,向下取整后为 4
#include <stdio.h>

int main() {
    int n,a;
    scanf("%d",&n);
    for(a=0;a<n;a++){
        if((a*a)<=n&&(a+1)*(a+1)>n)
            break;    
    }
printf("%d",a);
    
    
   
    return 0;
}

发表于 2025-11-10 15:31:49 回复(0)
print(str(int(input())**0.5).split('.')[0])
发表于 2025-06-26 22:04:47 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int a = in.nextInt();

        // 计算平方根并且向下取整
        // Math.sqrt(n)返回double类型的平方根,强制转换为int会自动截断小数部分(即向下取整)
        int res = (int)Math.sqrt(a);

        System.out.println(res);        

        in.close();
    }
}

  1. 核心逻辑
    • 利用 Java 内置的Math.sqrt(n)方法计算 n 的平方根,返回值为double类型
    • 将double类型的平方根强制转换为int类型,此时会自动截断小数部分,得到向下取整的结果(符合题目要求)
  1. 边界情况处理
    • 最小输入 n=1:Math.sqrt(1)=1.0 → 输出1
    • 最大输入 n=10⁹:其平方根约为 31622.776,强制转换后得到31622
    • 完全平方数(如 n=25):Math.sqrt(25)=5.0 → 输出5

发表于 2025-10-04 13:03:52 回复(0)
#include <stdio.h>
#include <math.h>
int main(){
long long n=0;
scanf("%d",&n);
int result=sqrt(n);
printf("%d\n",result);
    return 0;
}
发表于 2026-01-31 15:46:36 回复(0)
n = int(input())
n = int(n**0.5)
print(n)
发表于 2025-11-09 21:42:37 回复(0)
print(int(int(input()) ** 0.5))
发表于 2026-03-16 21:40:50 回复(0)
#include <stdio.h>
int main(){
    int n;
    int left=0,right;
    scanf("%d",&n);
    right=n;
    while(left<=right){
        int mid = left+(right-left)/2;
        if(mid*mid>n){
            right=mid-1;
        }
        else if(mid*mid<n){
            left=mid+1;
        }
        else {
            printf("%d",mid);
            break;
        }
    }
    if(left>right)
        printf("%d",right);
    return 0;
}
发表于 2026-01-14 11:03:10 回复(0)
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int a;
    cin>>a;
    cout<<floor(sqrt(a));
}
// 64 位输出请用 printf("%lld")
发表于 2026-01-08 20:28:20 回复(0)
#include <iostream>
using namespace std;
#include <cmath>
int main(){
    int n;
    cin >> n;
    int b = sqrt(n);
    cout << b << endl;

    return 0;
}

发表于 2025-12-07 01:57:48 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextFloat()) { // 注意 while 处理多个 case
            float a = in.nextFloat();
            double b = Math.sqrt(a);
            double c = Math.floor(b);
            System.out.println((int)c);
        }
    }
}
发表于 2025-06-06 10:56:31 回复(0)
import sys
import math

for line in sys.stdin:
    a = line.split()
    print(math.floor(math.sqrt(int(a[0]))))
发表于 2026-04-22 10:08:47 回复(0)
#include <iostream>
#include<cmath>
using namespace std;

int main() {
    int a, b;
    cin>>a;
    sqrt(a);
    b=sqrt(a);
    cout<<b;
   
}
发表于 2026-04-11 21:31:32 回复(0)
using System;
public class Program {
    public static void Main() {
      double n=double.Parse(Console.ReadLine());
      int result=(int)Math.Sqrt(n);
      Console.WriteLine($"{result}");
    }
}
发表于 2026-04-02 22:32:57 回复(0)
#include <stdio.h>
#include <math.h>
int main() {
    int n;
    scanf("%d", &n);
 
    double m= sqrt(n);
    printf("%d", (int)floor(m));
    return 0;
}
发表于 2026-03-27 00:20:53 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long n = in.nextLong();
        long left = 1 , right = n;
        long result = 0;

        while (left <= right){
            long mid = left + (right - left) / 2;

            if (mid * mid <= n){result = mid;left = mid + 1;}

            else {right = mid - 1;}
        }

        System.out.println(result);
        in.close();
    }
}
二分查找法,在【1,n】区间内查找最符合x²<=n的数

大了就往小方向找,小了就往大方向找

找到最大的整数x,其满足 x * x ≤ n

发表于 2026-03-25 23:14:49 回复(0)
#include <stdio.h>
#include <math.h>

int main() {
    double n;  // 输入的正数
    scanf("%lf", &n);
   
    double sqrt_n = sqrt(n);      // 计算平方根
    int result = (int)sqrt_n;     // 强制类型转换,去掉小数部分(向下取整)
   
    printf("%d\n", result);
    return 0;
}
发表于 2026-03-24 21:11:46 回复(0)
n=abs(int(input()))
m=n**(1/2)
print(int(m))
发表于 2026-03-21 19:57:15 回复(0)
import math
x=int(input())
a=math.sqrt(x)
b=math.floor(a)
print(b)
发表于 2026-03-19 11:22:51 回复(0)
#include <stdio.h>
#include <math.h>

int main() {
    int n;
    scanf("%d",&n);
    printf("%d\n",(int)sqrt(n));
    return 0;
}
发表于 2026-03-18 18:53:53 回复(0)
import math
print(f'{math.sqrt(int(input()))//1:.0f}')
发表于 2026-03-15 21:57:44 回复(0)