flag
蓝桥杯第12天
题目介绍
问题描述
输出大等于n的最小的完全平方数。
若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数
Tips:注意数据范围
输入格式
一个整数n
输出格式
大等于n的最小的完全平方数
样例输入
71711
样例输出
71824
数据规模和约定
n是32位有符号整数
思路
带入实例进行分析:
1.比如5,开方是2.236,结果应该是3的平方,java中的Math.sqrt()函数可以得到应该double类型的非负平方根,强制取整再+1,平方即可
2.比如本来就是完全平方数的9,结果就是本身
3.考虑到还有负数,对所有负数来说,最小的完全平方数都是0
4.这个坑真的坑了我好多次,能用long就别用int,虽然题中说n是32位有符号整数,但是结果有可能超过这个范围,int就不够表示了
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
long n=input.nextInt();
double x=Math.sqrt(n);
long res=0;
if(n<=0){
res=0;
}
else if(((long)x*(long)x)==n)
res=(long)x;
else res=(long) x+1;
System.out.println(res*res);
}
}