C++判定回文数

#include <iostream>
#include <cmath>

int main()
{
using namespace std;
unsigned int a;
int c,d=0,i=0;
cout << "请输入一个正整数\n";
cin >> a;
do
{a=a/10;
i++;}while (a!=0); \\判定位数i
for (int b=1;b<=i/2;b++)
{c=a%10*pow(10.0,(i-b+1));\\将位数倒序
d+=c;
a/=10;}
if((d-a)/pow(10.0,(i/2))==0) \\忽略后一半位数
cout << "Yes\n";
else cout << "No\n";
return 0;
}
问下这个程序错在哪里?

#include <stdio.h>
#include <string.h>

/* 功能:判断一个数是不是回文数
* 参数:iData -- 需要判断的数
* 返回值:true -- 是回文数; false -- 不是回文数*/
bool IsStrReverse(int iData)
{
/* 取绝对值*/
iData > 0 ? iData : - iData;
/* 把iData各位输出到buf中*/
char buf[100];
sprintf(buf, "%d", iData);
int nCount = strlen(buf);
/* 如果不能用string.h库,可以用以下代码代替以上两行
int nCount;
for (nCount = 0; iData > 0; ++nCount)
{
buf[nCount] = iData % 10 + '0';
iData /= 10;
}
*/
/* 检查iData是不是符合回文数的条件*/
for (int i = 0; i < nCount/2; ++i)
if (buf[i] != buf[nCount-i-1])
return false; /* 不符合回文数条件*/
return true; /* 符合回文数条件*/
}

int main(void)
{
// 读入数iData
int iData;
scanf("%d", &iData);
int iReverse = 0; /*保存回文数*/
/*判断iData是不是回文数*/
if (IsStrReverse(iData))
iReverse = iData;
else
{
/*以iData为中心向两侧得到第一个回文数*/
for (int i = 1; ; ++i)
{
if(IsStrReverse(iData+i))
{
iReverse = iData + i;
break;
}
if (IsStrReverse(iData-i))
{
iReverse = iData - i;
break;
}
}
}
/*必然可以得到一个符合要求的回文数*/
printf("%d 是最靠近 %d 的回文数", iReverse, iData);

return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-07
在判断a的位数的时候你的a已经被除成0了,你应该对a进行拷贝,然后在判断a的位数。
其实你可以把a转换成一个字符串,或者直接定义一个字符串,然后把前面的和后面的字符比较,直到两个指针指向同一个地址或者判定不是回文的时候结束循环。本回答被提问者采纳
第2个回答  2011-08-07
do {a=a/10
这一步a被归零。应当用一个中间变量来代替

用C++,如何判断某个数是不是回文数?
1、打开Visual Studio软件,准备好一个新的空白cpp文件,用于稍后编写代码:2、这里定义一个名为palindrome的函数,用来处理判断回文的过程,判断的大致思路就是将一个数反着排列一遍,如果和原先的数一样,那么就是回文数,排列过程用到了余数和整除:3、最后保存一下文件,按住crtl+F5运行程序查看结果,...

C++从键盘输入一个正整数,如何判断是否为回文数?
输入以下程序即可判断:int len=strlen(s)-1,i;bool judge=true;for(i=0;iif(s[i]!=s[len-i]){ judge=false;break;} 1、“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(p...

C++判断回文数
return(l==n); \/\/这里l不可能再与n相等了

C++语言 输入一个正整数,判断它是否是回文数
if(n==num)printf("%d是回文数",n);else printf("No!它不是回文数!");return0;} 运行效果:

c++:编一函数int f(int n),功能为判断一个整数n是否为回文数
\/\/参考代码如下:#include <stdio.h>int f(int n)\/\/判断是否是回文数,是返回1,否则返回0{int t=0,m=n;while(m)\/\/如果m不等于0,执行下面循环,否则跳出循环 (求这个数各位上数字反向排列的数 ) {t*=10;t+=m%10;m\/=10;}return t==n;\/\/如果这个数各位数字反向排列所得数依然...

C++程序,判断一个数是否为回文数
cout<<"请输入一个数"<<endl;cin>>m;while(m){ array[i++]=m%10;m\/=10;} i--;\/\/while中的多自加了一个 while(i>j){ if(array[j++]!=array[i--])\/\/首位递增,末位递减,直到首位不再小于末位 break;} if(j>i)cout<<"是回文数"<<endl;else cout<<"不是回文数"<<endl;...

C++判定回文数
参数:iData -- 需要判断的数 返回值:true -- 是回文数; false -- 不是回文数*\/ bool IsStrReverse(int iData){ \/* 取绝对值*\/ iData > 0 ? iData : - iData;\/* 把iData各位输出到buf中*\/ char buf[100];sprintf(buf, "%d", iData);int nCount = strlen(buf);\/* 如果不能用...

c++判断任意区间回文素数个数怎么实现?
bool isPal(int i) \/\/ 判断传入的数i是否是回文数 { int temp[20];int top = 0;while (i){ temp[top++] = i % 10;i \/= 10;} for (int i = 0; (i << 1) < top; ++i){ if (temp[i] != temp[top - i - 1])return false;} return true;} 加上适当的输入和输出...

用C++编写程序求10~2000之间所有的回文数,判断一个数是否为回文数。要...
long int t;for(t=0;a>0;a\/=10)\/\/将整数反序 t=t*10+a%10;return t;} int nonre(lint n)\/\/判断给定的整数是否为回文数 { if(n>10 && n<2000){ if(re(n)==n)return 1;\/\/是返回1 else return 0;\/\/不是返回0 } return 0;\/\/不是返回0 } void main(){ int n,m;int...

求判断回文数的c++函数
include <iostream> using namespace std;int main(){ int n,s,x=0;cin>>n;s=n;while(s>0){ x=x*10+s%10;s=s\/10;} if(x==n){ cout<<"YES!"<<endl;} else { cout<<"NO!"<<endl;} return 0;}

相似回答