以下是查找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;之前预期的初始化程序。我不知道该把它放到哪里使它工作。
答案 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);