题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
完全平方指用一个整数乘以自己例如1×1,2×2,3×3等,依此类推。若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。完全平方数是非负数(下面会说到)。
灵巧的写法
这题最大的难点应该就是确定范围了,要是正着想不好确定,那就倒着思考
循环范围:
最小:
先求加上100再加上168后谁能开方,应为完全平方数从0开始,加上100能是完全平方数最小0,再加168那就最小就是168开方约13那就取12最大:
我没找十分精确,99的平方与100的平方之差就大于168了所以不可能比100更大所以最大取99,有时间可以再求一下。
为什么要%1,因为
Math.sqrt()
得到的是一个double类型的要想看开方后是不是整数那就取模1看是不是0
package myself;/** * @Auther QY * @Date 2023/12/14 */public class Thirteen { public static void main(String[] args) { perfectSquare(); } public static void perfectSquare() { for (int i = 12; i < 100; i++) { //这层看它减去168是不是还是平方数,也就是原数+100是不是平方数 if (Math.sqrt(Math.pow(i, 2) - 168) % 1 == 0) {// 如果是那就减去268得到原数 System.out.println((int) (Math.pow(i, 2) - 268)); } } }}
大众写法
public static void play() { for (int x = -100; x < 100000; x++) { if (Math.sqrt(x + 100) % 1 == 0) { if (Math.sqrt(x + 268) % 1 == 0) { System.out.println(x); } } }}