Description:
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 = 1
Code:
1 bool isHappy(int n) { 2 /*这道题的核心问题在于怎么判断是否为死循环。可以考虑:如果重复出现一个数字则说明将陷入死循环 3 一个int型数据经计算后的最大值为9*9*10=810.因此有810个数据需要记录。 4 备注:刚开始,有想到这个思路,但是没有分析到一个int型数据经计算后的最大值为9*9*10=810,所需空间并没有想象中那么大。 5 */ 6 int result = 0; 7 int data[1000] = {0}; 8 while (1) 9 { 10 result = 0; 11 while (n) 12 { 13 result += (n%10)*(n%10); 14 n = n/10; 15 } 16 if (result == 1) 17 return true; 18 else 19 { 20 if (data[result] == 1) 21 return false; 22 else 23 data[result] = 1; 24 } 25 n = result; 26 } 27 }
PS:
16位整数:-32768到32767
32位整数中:-2147483648到2147 483 647