Write an algorithm to determine if a number is “happy”.
A happy number is a number defined by the following >process: Starting with any positive integer, replace the >number by the sum of the squares of its digits, and repeat >the process until the number equals 1 (where it will stay), >or it loops endlessly in a cycle which does not include 1. >Those numbers for which this process ends in 1 are happy >numbers.
Example: 19 is a happy number
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1s
思路:迪杰斯特拉环算法。前面一个每次比后面一个多一步,如果有循环的话,一定追上
int getSquareSum(int num)
{
int sum = 0;
int temp = 0;
while(num)
{
temp = num % 10;
sum += (temp*temp);
num /= 10;
}
return sum;
}
bool isHappy(int n) {
int slow = n;
int fast = n;
if(n <= 0)
{
return false;
}
do
{
slow = getSquareSum(slow);
fast = getSquareSum(fast);
fast = getSquareSum(fast);
}while(slow != fast && fast != 1);
if(fast == 1)
{
return true;
}
return false;
}