leetcode中的这个快乐数字解决方案中有无限循环吗?

时间:2018-11-23 12:10:46

标签: algorithm

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;
}

是否有无限循环的机会?

1 个答案:

答案 0 :(得分:0)

如果迭代digitSquareSum可以无限增长,那么只会有一个无限循环。但是,当使用n位数字进行调用时,结果始终小于100n,因此不会发生这种情况,因为对于n> = 4,结果始终小于用作输入的数字。

所有语言都忽略了计算机中大多数语言的整数不能任意大的问题,如果结果在数学上可以增长到无穷大,您将得到整数溢出。结果可能是错误的,但仍然不会有无限循环。