使用一个无限循环 while(1) 来持续计算平方和: (1)调用 getSum 函数计算当前数字 n 的平方和,存储在变量 sum 中。 (2)如果 sum 等于1,则说明 n 是快乐数,函数返回 true。 (3)如果 sum 已存在于 result 集合中,说明进入了一个循环,当前数 n 不是快乐数,函数返回 false。 (4)否则,将 sum 添加到 result 集合中,用以追踪已经出现过的数字。 (5)更新 n 为 sum,以便在下一轮循环中处理新的数值。
完整代码
#include<iostream>#include<unordered_set>usingnamespace std;classSolution{public:intgetSum(int n){int sum =0;while(n !=0){
sum +=(n %10)*(n %10);
n /=10;}return sum;}boolisHappy(int n){
unordered_set<int> result;while(1){int sum =getSum(n);if(sum ==1){returntrue;}if(result.find(sum)!= result.end()){// 如果sum在result中出现过,则说明陷入无限循环了returnfalse;}else{
result.insert(sum);// 如果sum没有出现过且不为1,侧加入result中}
n = sum;// 更新n的值}}};intmain(){int n;
Solution s;
cin >> n;
cout << s.isHappy(n)<< endl;return0;}