解谜c++;代码有时有效,有时无效';T 我学习C++,并对项目欧拉编程难题感兴趣。这里有一个谜题,你需要找到由两个3位数字相乘而成的最大回文数。无论如何,我设法解决了这个难题,但我注意到一些奇怪的行为。有时这段代码有效,有时它会显

解谜c++;代码有时有效,有时无效';T 我学习C++,并对项目欧拉编程难题感兴趣。这里有一个谜题,你需要找到由两个3位数字相乘而成的最大回文数。无论如何,我设法解决了这个难题,但我注意到一些奇怪的行为。有时这段代码有效,有时它会显,c++,string,variables,int,C++,String,Variables,Int,解谜c++;代码有时有效,有时无效';T 我学习C++,并对项目欧拉编程难题感兴趣。这里有一个谜题,你需要找到由两个3位数字相乘而成的最大回文数。无论如何,我设法解决了这个难题,但我注意到一些奇怪的行为。有时这段代码有效,有时它会显示一些奇怪的数字。代码是用C++编写的: #include <bits/stdc++.h> using namespace std; // Find the largest palindrome made from the p

解谜c++;代码有时有效,有时无效';T 我学习C++,并对项目欧拉编程难题感兴趣。这里有一个谜题,你需要找到由两个3位数字相乘而成的最大回文数。无论如何,我设法解决了这个难题,但我注意到一些奇怪的行为。有时这段代码有效,有时它会显示一些奇怪的数字。代码是用C++编写的:

#include <bits/stdc++.h> 

using namespace std;

// Find the largest palindrome made from the product of two 3-digit numbers.

int main()
{

    string palindrome = "";
    string reversed;

    int64_t biggest;

    //reverse(palindrome.begin(), palindrome.end());
    //cout << palindrome << endl;

    for (int a = 999; a >= 100; a--){
        for (int b = 999; b >= 100; b--){
            palindrome = to_string(a*b);
            reverse(palindrome.begin(), palindrome.end());

            if (palindrome == to_string(a*b)){
                if (a*b > biggest) biggest = a*b;
            }
        }
    }

    cout << biggest;

    return 0;
}
#包括
使用名称空间std;
//查找由两个3位数字的乘积构成的最大回文。
int main()
{
字符串回文=”;
字符串反转;
国际贸易最大;
//反向(回文.开始(),回文.结束());
//cout=100;b--){
回文=to_字符串(a*b);
反向(回文.开始(),回文.结束());
if(回文==to_字符串(a*b)){
如果(a*b>最大值)最大值=a*b;
}
}
}

你不能初始化
最大的
。编译时是否启用了警告?
999*999
的结果超过了
int
保证能够表示的结果。这种溢出会产生未定义的行为<代码>最大的
是未初始化的,使用它要做的第一件事是将它与
a*b
进行比较,这也会给出未定义的行为。@StephenNewell感谢您的回复,我认为它们已启用,我看到了未使用变量的警告。生成命令如下所示:g++-std=c++17-Wshadow-Wall-o“%e”“%f”-g-fsanize=address-fsanize=undefined-D_GLIBCXX_DEBUG@LukaSsS-
int
将具有您在实践中描述的范围,但不能保证。如果有人学究气十足,他们可以在实践中用
static\u assert
@LukaSsS验证这一假设——该标准只要求
int
可以表示高达
32767
(即
2^15-1
)的值。是的,您的编译器可能支持更大的范围,但并非所有编译器都支持。如果您希望所有编译器的保证最大值(至少)为
2^31-1
,请使用
long
,而不是
int