编写一个算法来判断一个数是不是“快乐数”。
“快乐数”的定义为:在给定的进位制下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。
如果是无限循环但始终得不到 1那么这个数不是快乐数。
一、使用HashSet方法
import java.util.HashSet;
import java.util.Scanner;
//import java.util.Set;
public class HappyDigit {
public static boolean isHappy(int n) {
// Set<Integer> hashSet = new HashSet<Integer>();
HashSet<Integer> hashSet = new HashSet<Integer>();
hashSet.add(n);
while (n!=1) {
n = getNext(n);
// System.out.println(n); //计算过程的数
//含有n时,即进入了循环,不能得到1
if (hashSet.contains(n)) {
return false;
}
hashSet.add(n);//0也能被添加进去
}
return true; //n=1时返回true
}
private static int getNext(int n) {
int result = 0;
while (n > 0) {
result += Math.pow((n % 10), 2);
n /= 10;
}
return result;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(isHappy(n));
}
}
也可以将两个方法写到一个方法里
import java.util.HashSet;
import java.util.Scanner;
public class HappyDigit {
public static boolean isHappy(int n) {
HashSet<Integer> hashSet = new HashSet<Integer>();
hashSet.add(n);
while (n!=1) {
int result = 0;
while (n > 0) {
result += Math.pow((n % 10), 2);
n /= 10;
}
n = result;
// System.out.println(n); //计算过程的数
if (hashSet.contains(n)) {
return false;
}
hashSet.add(n);
}
return true;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(isHappy(n));
}
}
二、普通方法
import java.util.Scanner;
public class HappyDigit {
public static boolean isHappy(int n) {
while (n!=1) {
int result = 0;
while (n > 0) {
result += Math.pow((n % 10), 2);
n /= 10;
}
n = result;
if (n==0||n==4) { //要考虑0
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(isHappy(n));
}
}