判断一个数是否为快乐数

最后更新时间: 2019年3月22日10:06:37

package com.crossoverjie.algorithm;

import java.util.HashSet;
import java.util.Set;

/**

  • Function: 判断一个数字是否为快乐数字 19 就是快乐数字 11就不是快乐数字
  • 19
  • 11+99=82
  • 88+22=68
  • 66+88=100
  • 11+00+00=1
  • 11
  • 11+11=2
  • 2*2=4
  • 4*4=16
  • 11+66=37
  • 33+77=58
  • 55+88=89
  • 88+99=145
  • 11+44+5*5=42
  • 44+22=20
  • 22+00=2
    *
  • 这里结果 11+11=2 和 22+00=2 重复,所以不是快乐数字
    */

public class HappyNum {

/**
 * 判断一个数字是否为快乐数字
 * @param number
 * @return
 */
public boolean isHappy(int number) {
    Set<Integer> set = new HashSet<>(30);
    while (number != 1) {
        int sum = 0;
        while (number > 0) {
            //计算当前值的每位数的平方 相加的和 在放入set中,如果存在相同的就认为不是 happy数字
            sum += (number % 10) * (number % 10);
            number = number / 10;
        }
        if (set.contains(sum)) {
            return false;
        } else {
            set.add(sum);
        }
        number = sum;
    }
    return true;
}

public static void main(String[] args) {
    int num = 345;
    int i = num % 10;
    int i1 = num / 10;
    int i2 = i1 / 10;
    System.out.println(i);
    System.out.println(i1);
    System.out.println(i2);
}

}