C语言 关于判断回文数的程序
int main(void)
{
int a;
scanf("%d",&a);
int m;
int sum = 0;
m = a;
while(m)
{
sum = sum*10 + m%10;
m /= 10; // m = m/10
}
if( sum == a)
printf("是回文数!\n");
else
printf("不是回文数\n");
return 0;
}
大神们给解释下这个程序,,流程能看懂,但是判断的思路不清楚。。
我看网上还有一些判断的程序,貌似比这个复杂些,能对比解释下更好了。 展开
所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的。
首先,来判断一下一个数是否为回文数:
#include<;stdio.h>
void main(){
int num,s,y=0;
printf("Please input numbers:");
scanf("%d",&num);
s=num;
while(s>0){
y=y*10+s%10;
s=s/10;
}
if(y==num){
printf("%d是一个回文数!\n",num);
}else{
printf("%d不是一个回文数!\n",num);
}
}
判断一下一个字符串是否为回文数:
#include<stdio.h>
#include<string.h>//strlen函数的头文件
int main()
{
int j,i,n;
char a[999],b[999];
printf("Please input string:");
scanf("%s",a);//输入字符串
n=strlen(a);//用strlen函数读取字符串长度(长度到\0停止)
for(i=0,j=n-1;i<n;i++,j--)//循环将字符串a逆序赋值给b
b[j]=a<i>;
for(i=0;i<n;i++)
{
if(b<i>!=a<i>)
break;//判断是否回文
}
if(i==n)printf("是一个回文数!\n");//如果从第1位到n都相同则输出回文数
else printf("不是一个回文数!\n");
return 0;
}
扩展资料:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include<math.h>//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
任何一个数除以10的余数就是该数最后一位
任何一个数除以10的商就是排除掉最后一位后的数(因为 c++ 两个整数相除结果还是整数)
所以 ,一个数1234 就可以通过这种方法得到 123 和 4
接下来对 123 进行同样的操作,就得到 12 和 3
接下来得到 1 和 2
接下来得到 0 和 1
整个过程是个循环,当商不是 0 的时候就一直这么干
每次拿到一个余数,都用来构造新数,新数=新数*10+余数
所以经过四次循环后,我们得到新数 4321 ,如果是回文,那么新数应该等于原数,否则,说明不是回文。
比如你输入的数是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颠倒之后的数,如果两者相等,那就是回文数。
int main(void)
{
int a;
scanf("%d",&a);//举个例子a=1234
int m;
int sum = 0;
m = a;//m=1234
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;
}
if( sum == a)
printf("是回文数!\n");
else
printf("不是回文数\n");//1234!=4321所以不是回文数
return 0;
}