gpt4 book ai didi

c++ - 代码块 10.05 和 12.11、13.12 使用相同的代码返回不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:54 25 4
gpt4 key购买 nike

我写了下面的代码来判断一个数字是否是回文。但是当我编译并运行代码时,它在代码块 10.05 和 12.11、13.12 中返回了不同的结果。

我尝试了数字 12321 的代码。代码块 10.05 返回“数字 12321 有 5 位数字,是一个回文数字”。代码块 12.11 和 13.12 返回“数字 12321 有 5 位数字,不是回文数”。

这是代码。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int num, tmp, tmp2, i, k, last_num=0, check_num;

cout<<"Enter a number : ";
cin>>num;

tmp=num;
check_num=num;

for(i=1; tmp>=10; ++i)
{
tmp=(tmp-(tmp%10))/10;
}

cout<<"The number "<<num<<" has "<<i<< " digits ";
for(k=i-1; k>=0; k--)
{
tmp2 = num%10;
last_num+=tmp2*pow(10,k);

num=(num-(num%10))/10;
}

if(check_num == last_num)
{
cout<<"and is a palindrome number"<<endl<<endl;
}
else
{
cout<<"and is NOT a palindrome number"<<endl<<endl;
}

return 0;
}

最佳答案

您的代码过于复杂,不必要地复杂而且也不正确(因为我已经提到的 float 问题,即 pow() 返回的值可能不准确)。

您可以用一种更简单、更简洁的方式来实现它:以相反的顺序从数字中构建数字,然后检查以这种方式获得的数字是否与原始数字匹配:

int ispal(unsigned long long n)
{
unsigned long o = n;
unsigned long long k = 0;
while (n) {
k *= 10;
k += n % 10;
n /= 10;
}

return o == k;
}

(unsigned long long 仅用于代替普通的 int 以使此函数适用于尽可能大的数字。)

关于c++ - 代码块 10.05 和 12.11、13.12 使用相同的代码返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913348/

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