数据结构实例<九>(IsHappy 快乐数)容易
题目:
写一个算法来判断一个数是不是"快乐数"。
一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。
样例
19 就是一个快乐数。
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
Code:
*首先是无限循环获取下一个要处理的数据,GetNextNum().直至跳出循环。
*判断是否是快乐树,等于一就是快乐数。非快乐数将会陷入一个死循环,我们利用数组存储,判定是否匹配即为非快乐数。
public class IsHappy
{
/**
* @param n an integer
* @return true if this is a happy number or false
*/
//不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。
public Boolean isHappy(int n)
{
// Write your code here
var temp = n;
int[] unhappy = { 4, 16, 37, 58, 89, 145, 42, 20, 4 };
while (true)
{
temp = GetNextNum(temp);
if (temp == 1)
{
Console.WriteLine("Happy Number:{0}", n);
return true;
}
else if (unhappy.Contains(temp))
{
Console.WriteLine("UnHappy Number:{0}", n);
return false;
}
}
}
public int GetNextNum(int n)
{
double sum = 0;
while (n > 0)
{
sum += Math.Pow(n % 10, 2);
n = n / 10;
}
return (int)sum;
}
}