我最初想的是从中间往两边比较,但同样要考虑两种情况,十分复杂,因此采用了两边向中间比较,先用strlen函数确定字符串的长度,接着开始比较,每比较一次,左边加1,右边减一继续比较。当左边等于右边或左边小于右边的时候停止比较,一旦发现左右的数值不相等,那么立即将一个变量的值改变并且跳出循环。
最后来到了判断部分,如果上面提到的那个变量的值没有被改变,那么此数为回文数,如果被改变,那么此数不是回文数。
#include<stdio.h>
#include<string.h>
int main()
{
int b,c,start=0,end,d=1;
char a[1000];
gets(a);
b=strlen(a);
end=b-1;
while(start<end)
{
if(a[start]==a[end])
{
start++;
end--;
}
else
{
d=0;
break;
}
}
if(d==0)
printf("false\n");
else
printf("true\n");
return 0;
}
封装函数如下
#include<stdio.h>
#include<string.h>
int isPalindrome(char a[])
{
int b,c,start=0,end,d=1;
b=strlen(a);
end=b-1;
while(start<end)
{
if(a[start]==a[end])
{
start++;
end--;
}
else
{
d=0;
break;
}
}
if(d==1)
{
return 1; //当是回文时返回1
}
else
return 0; //当不是回文时返回0
}
int main()
{
int b;
char a[1000];
gets(a);
b=isPalindrome(a);
if(b==1)
printf("true\n");
else
printf("false\n");
return 0;
}
至此,回文字符串得以判断,回文数问题得到解决。