1、题目
写一个函数,判断一个整数是否为回文数,是返回1,不是返回0。
2、什么是回文数?
如果一个整数从左来读和从右来读都一样,就称它为回文数,如123321,12321,456654,45654.
3、思路
首先输入一个整数,然后判断他是几位数,然后判断是否小于等于0,或者最低为是否等于0,如果满足上述条件,返回-1,不满足则执行下面操作。
如果是奇数,以12321为例,让它个位与万位 十位与千位进行比较,如果均相等,返回1,否则返回-1
如果是偶数,以123321为例,让它个位与十万位 十位与万位进行比较,百位与千位,如果均相等,返回1,否则返回-1
4、全部代码如下:
#include#include int number_of_palindromes(int target,int n); int main() { int num,cpy,cnt = 1; printf("Please input a number:"); scanf("%d",&num); cpy = num; while(cpy/10) { cpy /= 10; cnt++; } printf("%d",number_of_palindromes(num,cnt)); return 0; } int number_of_palindromes(int target,int n) { int left = 0,right = 0,m,i; if(target <= 0 || target % 10 == 0) { return -1; } else if(n%2) { //位数为奇数 m = n/2+1; i = 1; while(n > m && i < m) { left = target % ((int)pow(10,n))/ ((int)pow(10,n-1)); right = target % ((int)pow(10,i))/ ((int)pow(10,i-1)); if(!(left == right)) { return -1; } n--; i++; } return 1; } else if(!(n%2)) { m = n/2; i = 0; while(n > m && i < m) { left = target % ((int)pow(10,n))/ ((int)pow(10,n-1)); right = target % ((int)pow(10,i+1))/ ((int)pow(10,i)); if(!(left == right)) { return -1; } n--; i++; } return 1; } }



