C++:Happy Number Endless Loop

Bij*_*jan 2 c++ optimization

我创建了一个函数来查找第一个X Happy Numbers.

幸福的数字由以下过程定义.从任何正整数开始,将数字替换为其数字的平方和,并重复该过程,直到数字等于1(它将保持不变),或者它在一个不包括1的循环中无休止地循环

我的问题是我怎么知道它在循环中无休止地循环?我目前正在做的是计算它通过Square Of Squares函数的次数,如果它> 10,它将返回0.这是我的代码..

C++

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

int k, rep = 0;

int SumOfSq(int num) {
    int total = 0;
    while(num) {
        int digit = num % 10;
        num /= 10;
        total += pow(digit,2);
    }
    return total;
}

bool Happy(int num) {
    int temp = 0;
    while(num != 1) {
        if(k == rep) exit(1);
        num = SumOfSq(num);
        if(temp++ > 10) {
            return 0; //Not happy
        }
    }
    rep++;
    return 1; //Happy
}

int main() {
    cout << "How many Happy Numbers to find? ";
    cin >> k;
    for(int j = 1;;j++) 
        if(Happy(j)) cout << j << " ";
}
Run Code Online (Sandbox Code Playgroud)

如果我的代码有任何错误或需要改进的地方,也请告诉我.电流输出应该是正确的.

小智 5

来自维基上的快乐数字:

如果n很满意,那么它的序列变为1.否则,它在循环中结束:

4, 16, 37, 58, 89, 145, 42, 20, 4, ... 
Run Code Online (Sandbox Code Playgroud)

所以,看看你是否已登陆其中一个数字,看看你是否处于不愉快的周期.

另一种方法是跟踪您所看到的数字,如果您计划在许多情况下旅行超过8个数字,这可能会更好.