Write an algorithm to determine if a is "happy".
A happy number is a number defined by the following process:starting with any positive integer, and replace the number by the Sum of the squares of its digits, and repeat the process until the number equals 1 (where it'll stay), or it loops Endl essly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy.
Example:19 is a happy number 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 Analysis: First we need to compute the numbers n every square sum, this is relatively simple, the code is as follows:
int countn (int n) {
int tmp = n;
int sum = 0;
while (tmp > 0) {
int result = tmp%;
sum + = result * result;
TMP = TMP/10;
}
return sum;
}
Then there is the main part of the function, which should be noted that loops may occur, such as: 2, 4, 16, 37, 58, 89, 145, 42, 20, 4, 16, 37 ... So we need to use a set of all the occurrences of N and Countn are recorded, so that the recurrence of time to stop the execution of the program to avoid a dead loop. Map is a better choice because the complexity of the lookup element is O (1). The main part of the code is as follows:
BOOL Ishappy (int n) {
map<int, int> int_map;
if (n==1) {return
true;
}
int sum = 0;
while (n!= 1) {
Int_map.insert (pair<int, int> (n, N));
sum = COUNTN (n);
if (sum ==1) {return
true;
}
if (Int_map.count (sum)) return
false;
n = sum;
}
return true;
}