java:大等于n的最小完全平方数

java:大等于n的最小完全平方数

题目

问题描述
  输出大等于n的最小的完全平方数。
  若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数
  Tips:注意数据范围
输入格式
  一个整数n
输出格式
  大等于n的最小的完全平方数
样例输入
71711
样例输出
71824
数据规模和约定
  n是32位有符号整数
import java.util.Scanner;

public class 大等于n的最小完全平方数 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		sc.close();
		//注意符号
		if(n>=0){
			//大于n的平方根的最大整数的平方
			double m=Math.pow(Math.ceil(Math.sqrt(n)), 2);
			System.out.println((int)m);
		}else{
			//小于n的平方根的最大整数的平方
			n=-n;
			double m=Math.pow(Math.floor(Math.sqrt(n)),2);
			System.out.println(-(int)m);
		}
		
		
		
	}

}

在这里插入图片描述
60%的正确率,我觉得是我小数的符号附的有问题,精确度也有问题

我好像知道了,因为大于复数的最小完全平方数应该是0,平方数怎么能带符号
在这里插入图片描述
解决了一个问题,大于0的时候还有问题
在这里插入图片描述
应该是double转换为Int的时候精度出了问题

应该不能转为Int,而应该转换为long 型
这样就对了
在这里插入图片描述

import java.util.Scanner;

public class 大等于n的最小完全平方数 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		sc.close();
		//注意符号
		if(n>0){
			//大于n的平方根的最大整数的平方
			double m=Math.pow(Math.ceil(Math.sqrt(n)), 2);
			System.out.println((long)m);
		}else{
			//小于n的平方根的最大整数的平方
			System.out.println(0);
		}
		
		
		
	}

}

另一种代码

import java.util.Scanner;

public class 大等于n的最小完全平方数1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		long n=sc.nextInt();
		sc.close();
		double x=Math.sqrt(n);
		long les=0;
		//int 栈31位,而long占64位,n是占32位
		//double x=Math.sqrt(n);//先开方,但有个问题,这个不能开方呀,万一是复数呢
		if(n<=0)
			les=0;
		else if(((long)x*(long)x)==n){
			les=(long)x;
		}
		//其他不能被开方的,转成整数会丢失精度,加1在乘方
        else les=(long) x+1;
        System.out.println(les*les);
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向上Claire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值