题目:编写一个函数,判断其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;
}

posted on 2010-04-10 10:35  蓝牙  阅读(165)  评论(0编辑  收藏  举报