Here是leetcode中的快乐数字问题
这是溶液的one。
使用floyd循环检测算法。
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;
}
有无限循环的机会吗?
最佳答案
只有当迭代digitSquareSum
可以无限增长时,才会有无限循环但当用n位数字调用时,结果总是小于100n,因此不会发生这种情况,因为对于n>=4,结果总是小于用作输入的数字。
所有这些都忽略了大多数语言中的整数不能任意大,如果结果在数学上增长到无穷大,就会出现整数溢出结果可能是错误的,但仍然不会有无限循环。
关于algorithm - leetcode中的这个快乐数字解决方案中有无限循环吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53446492/