1、定义
- 对于一个 正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程指导这个数变为 1,也可以能是 无限循环 但始终变不到 1。
- 如果 可以变为 1,那么这个数就是快乐数。
2、示例
输入整数:19
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
输出结果:true
3、实现
/**
* <h1>编写一个算法来判断一个数 n 是不是快乐数</h1>
* Created by woniu
*/
public class Test {
/**
* <h2>测试用例</h2>
* */
public static void main(String[] args) {
isHappyNumber(19);
}
/**
* <h2>判断一个数是不是快乐数</h2>
* @param number 整数
* */
public static boolean isHappyNumber(Integer number){
System.out.println("输入整数:" + number);
// 快乐数是一个正整数,所以小于 0 的一定不是
if(number < 0){
System.out.println("输出结果:false");
return false;
}
// 正整数等于 1 的一定是快乐数
if(number == 1){
System.out.println("输出结果:true");
return true;
}
// 临时存放已经计算过的整数
Set<Integer> existNumber = new HashSet<>();
while (number != 1){
// 校验整数是否存在,存在即无限循环,证明该整数不是快乐数
if(existNumber.contains(number)){
System.out.println("整数重复:" + number);
System.out.println("输出结果:false");
return false;
}
// 把整数添加到 Set 集合,用于校验整数是否存在
existNumber.add(number);
// 解析整数,开始计算
String numberStr = number + "";
char[] strCharArray = numberStr.toCharArray();
int sum = 0;
// 快乐数计算过程日志
String log = "";
for(int i = 0; i< strCharArray.length; i++){
Integer n = Integer.parseInt(strCharArray[i] + "");
log += " + " + n + "^2";
sum += n * n;
}
log += " = " + sum;
// 打印计算过程
System.out.println(log.substring(3,log.length()));
number = sum;
}
System.out.println("输出结果:true");
return true;
}
}
4、测试
4.1、示例一
输入整数:18
1^2 + 8^2 = 65
6^2 + 5^2 = 61
6^2 + 1^2 = 37
3^2 + 7^2 = 58
5^2 + 8^2 = 89
8^2 + 9^2 = 145
1^2 + 4^2 + 5^2 = 42
4^2 + 2^2 = 20
2^2 + 0^2 = 4
4^2 = 16
1^2 + 6^2 = 37
整数重复:37
输出结果:false
4.2、示例二
输入整数:1818
1^2 + 8^2 + 1^2 + 8^2 = 130
1^2 + 3^2 + 0^2 = 10
1^2 + 0^2 = 1
输出结果:true
实践是检验真理的唯一标准,一键送三连关注不迷路。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/78015.html