用 java 编写一个算法来判断一个数 n 是不是快乐数

导读:本篇文章讲解 用 java 编写一个算法来判断一个数 n 是不是快乐数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!