显示迭代次数 - C ++

时间:2015-10-08 01:00:38

标签: c++

以下是查找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;

} 

但是我得到了错误&#34;在&#34; {&#34;之前预期不合格的ID令牌&#34;和&#34;在&#39; int&#39;&#34;之前预期的初始化程序。我不知道该把它放到哪里使它工作。

2 个答案:

答案 0 :(得分:0)

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

更改此

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

到此

for ( i < iterCount; i++)

否则我建议使用while循环。

修改:有关变量范围的更多信息,我建议this教程。

答案 1 :(得分:0)

嗯,我不确定你的问题究竟是什么。如果输入在输入最大迭代次数内不是Lychrel数,则函数“isLychrel”当前返回false,否则返回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);