Happy Number


problem


Happy Numberとは?
与えられた因数の各桁数の二乗和を求める.
値が1の場合はhappy number、そうでない場合はこの手順を繰り返します.
Input: n = 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

solution

//problem no : 202
class Solution {
public:
    int calHappy(int n){
        int ans = 0;
        while(n > 0){
            int i = n%10;
            ans +=  i*i;
            n /= 10;
        }
        return ans;
    }
    
    bool isHappy(int n) {
        int happyNum = calHappy(n);
        set<int> myset;
        pair<set<int>::iterator,bool> p;
        
        while(happyNum != 1){
            p = myset.insert(happyNum);
            if(p.second == false){
                return false;
            }
            happyNum = calHappy(happyNum);
        }
        
        return true;
    }
};

ポスト


どうやって果てしなく動く部分を見つけますか?
以前に作成したslowとfastの概念を適用すれば、簡単に完成できます.