首页 > 试题广场 >

平方根

[编程题]平方根
  • 热度指数:13736 时间限制: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
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)
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)
#include<bits/stdc++.h>
#include <type_traits>
using namespace std;
int main(){
    int a;
    cin>>a;
    int c=sqrt(a);
    cout<<setprecision(1)<<c;
    return 0;
}
原来可以不用向下取整
发表于 2025-10-07 22:01:35 回复(0)
#include <math.h>
#include <stdio.h>

int main() {
    unsigned int a, b;  //定义成无符号整数

    scanf("%d\n\r", &a);

    b = sqrtf(a);

    printf("%d\n\r", b);

    return 0;
}
发表于 2025-10-02 11:50:52 回复(0)
怎么不包含头文件也能用
发表于 2025-09-30 10:21:50 回复(0)
#include <stdio.h>

int main() {
    int n;
    scanf("%d",&n);
    for(int i=0;i<=n/2+1;i++){
        if((i+1)*(i+1)>n){//注意n为0或1的情况
            printf("%d\n",i);
            break;
        }
    }

    return 0;
}
发表于 2025-09-28 13:33:16 回复(0)
package main

import (
    "math"
    "fmt"
)

func main() {
    var n float64= 0
    var b float64= 0
    fmt.Scan(&n)
    b=math.Sqrt(n)
    tmp:=0
    tmp=int(b)
    fmt.Printf("%d\n", tmp)
}

发表于 2025-09-23 00:22:12 回复(0)
#include <iomanip>
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double n;
    cin >> n;
    double s = sqrt(n);
    double a;
    for(double i = 0.0; s - i > -0.001 ; i += 1.0){
        a = i;
    }

    cout << fixed << setprecision(0) << a <<endl;

    return 0;
}

发表于 2025-09-22 16:44:12 回复(0)
import math
x=math.sqrt(int(input()))
print(f"{int(x)}")
发表于 2025-09-22 11:07:52 回复(0)
import math
a = int(input())
print(math.floor(a**0.5))
# 或
print(math.floor(math.sqrt(a)))
发表于 2025-09-12 15:12:56 回复(0)
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int main() {
    float a;
    cin >> a;
    cout << floor(sqrt(a));
}
发表于 2025-09-08 16:43:37 回复(0)
# include <stdio.h>
# include <math.h>

int main(){
    int n = 0;
    scanf("%d",&n);
    float res = sqrt(n);
    int _res = floor(res);
    printf("%d",_res);
    return 0;
}


发表于 2025-09-02 18:21:20 回复(0)
n = int(input())
#根号
n = n**0.5#开根号
print(int(n))
发表于 2025-09-01 10:37:21 回复(0)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

public class Program {
    public static void Main() {
        string line;
        while ((line = Console.ReadLine ()) != null) { // 注意 while 处理多个 case
            string[] tokens = line.Split();
            int a = int.Parse(tokens[0]);
            int b = (int)Math.Sqrt(a);
            Console.WriteLine(b);
        }
    }
}
发表于 2025-08-28 14:16:09 回复(0)
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        System.out.println((int)Math.sqrt(a));
    }
}

发表于 2025-08-07 15:27:13 回复(0)
按题目意思来。
#include <stdio.h>
#include <math.h>

int main() {
    
    float n = .0f;

    scanf("%f", &n);

    printf("%d",(int)floorf(sqrtf(n)));

    return 0;
}


发表于 2025-08-04 18:50:57 回复(0)
#include <stdio.h>
#include <math.h>
int main() {
    int b = 0;
    scanf("%d", &b);
    printf("%d", (int)sqrt (b));
    return 0;
}
笨鸟常规解法
发表于 2025-08-01 22:08:10 回复(0)
import math
a=math.floor(math.sqrt(int(input())))
print(a)
发表于 2025-07-29 21:54:19 回复(0)
#include <stdio.h>
#include <math.h>
    int main() {
        int a;
        scanf("%d", &a);
        
        int b = sqrt(a);
        
        printf("%d", b);
        return 0;
    }

发表于 2025-07-27 00:14:10 回复(0)