摘自本人之前的博客:
leetcode:happy number
class Solution {
public:
bool isHappy(int n) {
//简单想法就是直接n对10、100、1000等求余数,得到每一位的数字,平方之后重新组合成新的数字,然后再继续判断是否是happy number,直到为1停止,可是到底除到1000还是10000还是1000000?
//后来发现直接除以10就好了
if (n<1) return false;
if (n==1) return true;
vector<int>buf;
vector<int>::iterator it;
buf.push_back(n);
while(true)
{
int s=0;
while(n)//循环,直至n的余数为0;
{
s+=(n%10)*(n%10);
n=n/10;
}
if(s==1) return true;
else if (find(buf.begin(),buf.end(),s)!=buf.end() ) return false;
//如果满足这个条件,说明得到的该数字已经在之前出现过了,就是已经进入循环状态了
buf.push_back(s);
n=s;
}
}
};