题目:编写一个函数,判断其int型参数值是否是回文数,回文数是指从正向和反向两个方向读数字都一样,例如:9783879是一个回文数。
解答:
#include <iostream>
#define N 100
using namespace std;
int a[N];
bool hw(__int64 num)
{
int i=0;
while(num)
{
a[i++]=num%10;
num=num/10;
}
int j,k=i-1;
for(j=0;j<i/2;j++)//j<k/2如果数字是偶数个就不对了,少了一次
if(a[j]==a[k--])continue;
else
return false;
if(j==k/2)return true;//j==k/2应该是不对的呀,因为for循环中K值发生了变化,可是也没出错
//应该改成j==(k-1),相当于j再加一次就等于K。又因为for循环结束时j多加了一次,而到了最后时j与k的位置正好相差2
//这样只适合于偶数个数字,最好改成j==i/2,这样对于奇偶个数字都考虑了
}
int main()
{
__int64 num;
while(cin>>num)
{
memset(a,0,sizeof(a));//开始测试a数组里的值一直为0,怀疑第二次时,数组保留有原来的值,故加上这句
if(hw(num))
printf("yes\n");
else
printf("no\n");
}
system("pause");
return 0;
}