Here是leetcode中的快乐数字问题
这是解决方案的one
使用弗洛伊德循环检测算法。
int digitSquareSum(int n) {
int sum = 0, tmp;
while (n) {
tmp = n % 10;
sum += tmp * tmp;
n /= 10;
}
return sum;
}
bool isHappy(int n) {
int slow, fast;
slow = fast = n;
do {
slow = digitSquareSum(slow);
fast = digitSquareSum(fast);
fast = digitSquareSum(fast);
} while(slow != fast);
if (slow == 1) return 1;
else return 0;
}
是否有无限循环的机会?
答案 0 :(得分:0)
如果迭代digitSquareSum
可以无限增长,那么只会有一个无限循环。但是,当使用n位数字进行调用时,结果始终小于100n,因此不会发生这种情况,因为对于n> = 4,结果始终小于用作输入的数字。
所有语言都忽略了计算机中大多数语言的整数不能任意大的问题,如果结果在数学上可以增长到无穷大,您将得到整数溢出。结果可能是错误的,但仍然不会有无限循环。