显示迭代的次数- c++

Displaying the number of iterations - C++

本文关键字:c++ 迭代 显示      更新时间:2023-10-16

下面是查找Lychrel数的代码(到目前为止它还不完美,但这对问题并不重要:

#include <iostream>
int Reverse(int number)
{
    int rem = 0;
    while (number > 0)
    {
    rem = (rem * 10) + (number % 10);
        number = number / 10;
    }
    return rem;
}
bool is_Palindrome(int num)
{
    return (num == Reverse(num));
}
bool isLychrel(int num, const int iterCount = 50)
{
    int temp = num;
    int rev;
    for (int i = 0; i < iterCount; i++)
    {
        rev = Reverse(temp);
        if (is_Palindrome(rev + temp))
            return false;
        temp = temp + rev;
    }
    return true;
}
int main()
{
    bool l = isLychrel(some number);
    std::cout << l << "n";
    return 0;
} 

我想做的是,除了显示它是否为Lychrel数之外,我想显示发现回文需要多少次迭代。所以我知道我必须定义一个int I = 0,但我不知道在哪里,也不知道如何让它工作。我尝试在循环之外执行,像这样:

int i = 0;
{
    int temp = num;
    int rev;
    for (int i = 0; i < iterCount; i++)
    {
        rev = Reverse(temp);
        if (is_Palindrome(rev + temp))
            return false;
        temp = temp + rev;
    }
    return true;
} 

但我得到错误"预期的非限定id"之前{"token"answers"预期的初始化器之前'int'"。我不知道把它放在哪里才能使它起作用。

如果你想在循环外重用"i",那么你需要将初始化器从for循环中取出。

改变这个

for (int i = 0; i < iterCount; i++)

,

for ( i < iterCount; i++)

否则我建议使用while循环。

编辑:关于变量作用域的更多信息,我推荐这个教程

我不确定你的问题到底是什么。你的函数"isLychrel"目前返回false,如果已知输入在输入迭代的最大次数内不是一个Lychrel数,否则返回true。您是否希望您的函数也返回实际执行的迭代次数?如果是这样,您可以在签名中提供对整数变量的引用,以接收实际的迭代次数。

也就是说,你的函数可以像这样

 bool isLychrel(int num, int& ornNumIters, const int iterCount = 50)
 {
    int temp = num;
    int rev;
    for (int i = 0; i < iterCount; i++)
    {
         rev = Reverse(temp);
         if (is_Palindrome(rev + temp))
         {
             ornNumIters = i; 
             return false;
         }
         temp = temp + rev;
    }
    ornNumIters = iterCount; 
    return true;
}

你可以这样称呼它:

 int nActualIterations = 0; 
 bool bResult = isLychrel(89,nActualIterations);