一、判断一个数是不是对称数
思路:根据参数构造一个新的数(实现从低位到高位逆转),这个数是将原数的高低位对称交换,例如:123---->321, 12321----->12321。使用while循环实现
/*data是要实现的函数接收到的参数*/
int temp = data;
int new_data = 0;//作为新的data与原来的data比较
while(temp)//通过循环一次取出data的低位至高位,并生成new_data
{
new_data = new_data * 10 + (temp % 10);
temp = temp / 10;
}
然后实现函数的其他部分:
/**
判断一个数是不是对称数(回文数),是的话返回1,不是的话返回0
*/
#include <stdio.h>
int ispalindromenum(int data){
int temp = data;
int new_data = 0;//作为新的data与原来的data比较
while(temp)//通过循环一次取出data的低位至高位,并生成new_data
{
new_data = new_data * 10 + (temp % 10);
temp = temp / 10;
}
if(data == new_data){
return 1;
}
return 0;
}
void main(){
int n1 = 123321;
int n2 = 67876;
printf("%d is :\t%d\n", n1, ispalindromenum(n1));
printf("%d is :\t%d\n", n2, ispalindromenum(n2));
getchar();
}
二、判断字符串是不是回文(对称)
采用逐个字符比较的方法。当然,上面的对于对称数的判断也可以先将该数转化成字符串,然后采用下面的方法比较,不过好像有点绕。。。
//判断是不是回文,是返回1,不是返回0,出错返回-1
#include <stdio.h>
#include <string.h>
int palindrome(char *p){
while(p != NULL){
int length = 0;//用于记录字符长度
int i = 0;
length = strlen(p);
for( ; i < ((length + 1) / 2); i++){
if(*(p + i) != *(p + length -1 - i)){//出现不相等的字符
return 0;
}
}
return 1; //遍历字符串的一半后没有发现不同的字符,说明字符串是回文
}
return -1;//字符串指针为空
}