首先什么是回文数?
“回文”是指正读反读都能读通的句子,设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
输入一个数,判断程序如下:
#include<stdio.h>
int main()
{
int val; // 存放待判断数据
int m;
int sum = 0;
printf("请输入一个数:");
scanf("%d", &val);
m = val;
while(m)
{
sum = sum*10 + m%10; // 将原来的数反转存到sum里
m /= 10; // m = m / 10
}
if(sum == val)
printf("是回文数\n");
else
printf("不是回文数\n");
return 0;
}
比如你输入的数是12321:
循环开始前:m=12321,sum=0;
第1次循环结束:m=1232,sum=1;
第2次循环结束:m=123,sum=12;
第3次循环结束:m=12,sum=123;
第4次循环结束:m=1,sum=1232;
第5次循环结束:m=0,sum=12321。
输入的是几位数就循环几次。
判断的思路就是,通过循环依次把m的个位,十位,百位...上的数取出来,与sum*10相加。这样得到的数sum就是m颠倒之后的数,如果两者相等,那就是回文数。
while(m) //m在第四次为0,循环的条件为m不等于0,所以循环四次结束
{
sum = sum*10 + m%10; //第一次等式为sum=0*10+1234%10(其实值就是4)=4,第二次等式为sum=4*10+123%10(其实值为3)=43,第三次等式为sum=43*10+12%10(其实值为2)=432,第四次sum=432*10+1%10(其实为1)=4321
m /= 10; // m = m/10,第一次等式为m=1234/10=123,第二次m=123/10=12,第三次m=12/10=1,第四次m=1/10=0;
}
回文字符串的判断:
#include <stdio.h>
#include <string.h>
int main()
{
char *p = "abcdedcba";
char *l = p;
char *r = p + strlen(p) - 1;
while (l < r)
{
if (*l == *r)
{
l++;
r--;
}
else
{
printf("不是回文字符串\n");
return 0;
}
}
printf("是回文字符串\n");
return 0;
}