目录
方法一:将该整数放入数组中,通过判断是否为回文字符串的方法来进行判断。
1.回文定义
回文,即将该字符串或数字反向排列后与原字符串或数字相同。
例如,"abcdcba"、12344321等。
2.回文字符串
题目:判断输入的字符串是否为回文。
解析:可将字符串首尾字符相比较,如相同,则继续比较第二个字符与倒数第二个字符,第三个字符与倒数第三个字符……直到比较到中间的数或字符不相等。
可定义指针*p,*q分别指向第一个字符与最后一个字符,若*p==*q,则让*p指向下一个字符,*q指向上一个字符,直到p>=q。
程序如下:
#include <stdio.h>
#include <string.h>
int hw(char *s)
{
char *p,*q;
p=s; //让*p指向字符串第一个字符
q=s+strlen(s)-1; //让*q指向字符串最后一个字符
while(p<q) //依次比较,直到*p,*q指向的地址交叉或相等
{
if(*p==*q)
{
p++;
q++;
}
else
return 0;
}
return 1;
}
main()
{
char s[100];
gets(s);
if(hw(s))
printf("是回文\n");
else
printf("不是回文\n");
return 0;
}
3.回文数
题目:判断输入的整数是否为回文数。
方法一:将该整数放入数组中,通过判断是否为回文字符串的方法来进行判断。
解析:可将该整数依次放入一个数组中,再延续判断回文字符串的方法进行比较。
程序如下:
#include <stdio.h>
#include <string.h>
int hws(int n)
{
int num[100],*p,*q,i,j;
for(i=0;n*10/10>0;i++) //将整数放入数组中,此时数组中为倒序排列。
{
num[i]=n%10;
n/=10;
}
for(j=0;j<i/2;j++) //将数组中数改为正序排列,有没有结果都是一样的。
{
num[j]+=num[i-1-j];
num[i-1-j]=num[j]-num[i-1-j];
num[j]-=num[i-1-j];
}
p=num; //让*p指向首地址
q=num+i-1; //让*q指向尾地址
while(p<q) //依次比较,直到*p,*q指向地址相同或交叉
{
if(*p==*q)
{p++;q--;}
else
return 0;
}
return 1;
}
main()
{
int n;
scanf("%d",&n); //输入该整数
if(hws(n)) //用函数判断是否为回文数
printf("是回文数\n");
else
printf("不是回文数\n");
return 0;
}
方法二:将该整数倒过来,与原数进行比较。
解析:循环进行加上num对10取余并乘10,num除10。便可以将num反向排列。
程序如下:
#include <stdio.h>
#include <string.h>
int hws(int n1)
{
int s=0,n2; //定义s存放反序排列的num,定义n2记录num的值
n2=n1;
while(n1) //将num反序排列并存入s中
{
s=s*10+n1%10;
n1/=10;
}
return ((n2==s)?1:0); //如果反序后的数等于原数,则为真,否则为假
}
main()
{
int num;
scanf("%d",&num);
if(hws(num))
printf("是回文\n");
else
printf("不是回文\n");
return 0;
}