C++ 检查C+中的回文+;,有些输出工作正常,有些则为';T int反转(int); int main(){ coutn; int n_别名{n}; int m=反向(n); 如果(n_别名==m){ 浮点运算不是实数运算。尾数和指数(通常以2为基数,虽然以10为基数并非闻所未闻)的范围都是有限的

C++ 检查C+中的回文+;,有些输出工作正常,有些则为';T int反转(int); int main(){ coutn; int n_别名{n}; int m=反向(n); 如果(n_别名==m){ 浮点运算不是实数运算。尾数和指数(通常以2为基数,虽然以10为基数并非闻所未闻)的范围都是有限的,c++,c++17,C++,C++17,证明在整数计算中包含浮点是准确的是一项绝对不平凡的任务,即使您可以依赖于实现中使用的浮点包是完全准确的,并且不允许任何快捷方式。只要避免它就行了 无论如何,反转数字可以更简单: int reverse(int); int main(){ cout<<"Enter a number : "; int n{}; cin>>n; int n_alias{n}; int m=reverse(n); i

证明在整数计算中包含浮点是准确的是一项绝对不平凡的任务,即使您可以依赖于实现中使用的浮点包是完全准确的,并且不允许任何快捷方式。只要避免它就行了

无论如何,反转数字可以更简单:

int reverse(int);

int main(){
    cout<<"Enter a number : ";
    int n{};
    cin>>n;
    int n_alias{n};
    int m=reverse(n);
    
    if (n_alias==m){
        cout<<"The number "<<n<<" in reverse is "<<m<<endl;
        cout<<"So "<<n<<" a palindrome\n\n";
    }
    
    else{
        cout<<"The number "<<n<<" in reverse is "<<m<<endl;
        cout<<"So "<<n<<" not a palindrome\n\n";
    }
}

int reverse(int q){
    vector<int> vec{};
    int t{};
    
    while (q>0){
        t=q%10;
        vec.push_back(t);
        q-=t;
        q/=10;
    }
    size_t u{vec.size()};
    int b{};
    for (size_t i{};i<u;i++){
        
        b+=(vec[i])*pow(10,u-i-1);
    }
    return b;
}

浮点运算不是实数运算。尾数和指数(通常以2为基数,尽管以10为基数并非闻所未闻)都有一个有限的范围

证明在整数计算中包含浮点是准确的是一项绝对不平凡的任务,即使您可以依赖于实现中使用的浮点包是完全准确的,并且不允许任何快捷方式。只要避免它就行了

无论如何,反转数字可以更简单:

int reverse(int);

int main(){
    cout<<"Enter a number : ";
    int n{};
    cin>>n;
    int n_alias{n};
    int m=reverse(n);
    
    if (n_alias==m){
        cout<<"The number "<<n<<" in reverse is "<<m<<endl;
        cout<<"So "<<n<<" a palindrome\n\n";
    }
    
    else{
        cout<<"The number "<<n<<" in reverse is "<<m<<endl;
        cout<<"So "<<n<<" not a palindrome\n\n";
    }
}

int reverse(int q){
    vector<int> vec{};
    int t{};
    
    while (q>0){
        t=q%10;
        vec.push_back(t);
        q-=t;
        q/=10;
    }
    size_t u{vec.size()};
    int b{};
    for (size_t i{};i<u;i++){
        
        b+=(vec[i])*pow(10,u-i-1);
    }
    return b;
}
还有一个选择:

auto reverse(unsigned long long  n) {
    constexpr auto base = 10u;
    unsigned long long r = 0;
    for (; n > 0; n /= base)
        r = r * base + n % base;
    return r;
}
还有一个选择:

auto reverse(unsigned long long  n) {
    constexpr auto base = 10u;
    unsigned long long r = 0;
    for (; n > 0; n /= base)
        r = r * base + n % base;
    return r;
}

由于您知道输入失败,您可以使用其中一个调试器,在监视变量及其值的同时,使用调试器逐条检查代码语句。这是解决此类问题的常用方法。@Someprogrammerdude我使用了调试器,但它没有以“locals”显示变量。我已经向我的导师询问了这方面的问题t、 一旦他回答meArgh,我将再次使用它。为什么要在混合中加入浮点?输出的具体错误是什么?看起来像预期的输出。我无法复制它。当我复制并粘贴此示例代码,加上省略的include和using语句时,它正确地指出121、12321和123454321是回文。它还正确地指出122和12322不是回文。由于您知道输入失败,您可以使用其中的一个,并使用调试器在监视变量及其值时逐条检查代码语句。这是解决此类问题的常用方法。@Someprogrammerdude我使用了调试器,但它没有显示出来在“局部变量”中定义变量。我已经问过我的导师。他回答meArgh后,我会再次使用它。为什么要在混合中使用浮点?输出的“具体错误”是什么?看起来像预期的输出。我无法复制这一点。当我复制并粘贴此示例代码,以及省略的include和using语句时,它正确地指出121、12321和123454321是回文。它也正确地指出122和12322不是回文。从字面上看,这是一个双重的例子,
double
double
辛苦和麻烦。你是不是建议我停止使用“size_t”?@sudhanshu使用
size_t
有点随机,但至少它是无符号的,而且可能布莱不小于
int
。但它可能是。从字面上看,这是一个
double
double
辛苦和麻烦的例子。你建议我停止使用“size\u t”吗?@sudhanshu使用
size\u t
有点随机,但至少它没有签名,可能不小于
int