gpt4 book ai didi

c++ - 达到 int_max 之前的迭代次数

转载 作者:行者123 更新时间:2023-11-30 05:37:58 26 4
gpt4 key购买 nike

下面是一段代码,用于检查给定数字是否为 Lychrel 数字。这基本上意味着该程序取一个数及其倒数之和,然后取那个数及其倒数之和,等等,直到找到回文。如果它在一定的迭代次数内没有找到这样的数字(我在这个程序中选择了 50),我们就断定它是一个 Lychrel 数。

#include <iostream>


using namespace std;

int rev(int number){ //function to reverse numbers
int rem = 0;
while (number > 0){
rem = (rem * 10) + (number % 10);
number = number / 10;
}
return rem;
}

bool Palindromecheck(int num){ //bool to check if a number is palindrome
return (num == rev(num));
}

bool isLychrel(int checknumber, int &iterationcount){
const int iterCount = 50;
int reversed = rev(checknumber);
int counter = 0;
if (checknumber == reversed){ //makes sure that a number that starts out as a palindrome gets value "0" for iterations
return false;
}
while (counter < iterCount){ //loop that keeps going until it finds a palindrome or reaches 50 iterations
counter = (counter + 1);
iterationcount = counter;
if (Palindromecheck(reversed + checknumber))
return false;
checknumber = checknumber + reversed;
reversed = rev(checknumber);
}
return true;
}

int main()
{
int checknumber;
int iterationcount;
cout << "Please enter a number: \n";
cin >> checknumber;
bool lychrelcheck = isLychrel(checknumber, iterationcount);
if (lychrelcheck == true){
cout << checknumber << " is a Lychrel number. \n";
}
else
cout << checknumber << " is not a Lychrel number. \n";
cout << iterationcount << " is the numbers of iterations necessary to reach a palindrome. \n";
return 0;

}

现在,根据我所见,这个程序运行良好,但它有两个我不知道如何解决的错误:

  1. 如果您为程序提供一个 1 位数,它会为您提供非常大(有时为负)的迭代次数。我什至不知道为什么这应该是可能的,因为最大迭代次数是 50。最重要的是,它为相同的数字提供了不同的迭代次数。例如, checknumber = 5 可以给你一个巨大的正数迭代或一个巨大的负数迭代。我试图通过从代码中取出一行并稍微修改它来改变它:

    bool isLychrel(int checknumber, int &iterationcount){
    const int iterCount = 50;
    int reversed = rev(checknumber);
    int counter = 0;
    if ((checknumber == reversed) or (checknumber <= 9)){
    }

我认为这会将 0 的迭代计数分配给 10 以下的数字,但事实并非如此,由于某种原因,同样的问题仍然存在。

  1. 这个程序无法完成所有 50 次迭代,因为数字太大了(我不介意,我特意为此选择了 50 次)。我希望能够在达到某个数字的 int_max 迭代次数后显示。现在,它只是说每次超过 int_max 时它都会完成 50 次迭代,即使一个数字不是 Lychrel 数并且它甚至没有完成 50 次迭代(或者它完成了,但可能是负数等) .

我在某处读到您可以使用 include 来做到这一点,但我不知道该怎么做。

最佳答案

对于第一个,如果您输入 1 位数字,您的函数将在 iterationcount 之前返回得到任何值(value)。要修复它,请设置 iterationcount在函数的开头为 0:

int counter = 0;
iterationcount = counter;

实际上你可以使用iterationcount作为计数器而不是为其创建单独的变量。

第二个问题使用std::numeric_limits<int>::max() .所以新函数看起来像这样:

bool isLychrel(int checknumber, int &iterationcount) {
const int iterCount = 50;
int reversed = rev(checknumber);
int counter = 0;
iterationcount = counter;
if (checknumber == reversed) { //makes sure that a number that starts out as a palindrome gets value "0" for iterations
return false;
}
while (counter < iterCount) { //loop that keeps going until it finds a palindrome or reaches 50 iterations
if (std::numeric_limits<int>::max() - reversed < checknumber)
return true;
++counter;
iterationcount = counter;
if (Palindromecheck(reversed + checknumber))
return false;
checknumber += reversed;
reversed = rev(checknumber);
}
return true;
}

关于c++ - 达到 int_max 之前的迭代次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33026886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com