C语言 关于判断回文数的程序

#include<stdio.h>
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;
}

大神们给解释下这个程序,,流程能看懂,但是判断的思路不清楚。。
我看网上还有一些判断的程序,貌似比这个复杂些,能对比解释下更好了。

1、首先打开vc6.0,新建一个控制台项目,添加头文件

2、然后我们根据图示代码添加main主函数。

3、然后我们根据图示代码定义6个long型变量。

4、然后我们根据图示代码使用scanf给input赋值。

5、然后我们根据图示代码分解个位、百位、千位、万位。

6、然后我们根据图示代码使用if判断。

7、然后我们根据图示代码运行程序,看看结果无误。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-20

所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的。

首先,来判断一下一个数是否为回文数:

#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>//一些数学函数的原型,以及相关的类型和宏

如果需要包含针对程序所开发的源文件,则应该使用第二种格式。

本回答被网友采纳
第2个回答  推荐于2018-04-12
原理:

任何一个数除以10的余数就是该数最后一位
任何一个数除以10的商就是排除掉最后一位后的数(因为 c++ 两个整数相除结果还是整数)

所以 ,一个数1234 就可以通过这种方法得到 123 和 4
接下来对 123 进行同样的操作,就得到 12 和 3
接下来得到 1 和 2
接下来得到 0 和 1

整个过程是个循环,当商不是 0 的时候就一直这么干

每次拿到一个余数,都用来构造新数,新数=新数*10+余数

所以经过四次循环后,我们得到新数 4321 ,如果是回文,那么新数应该等于原数,否则,说明不是回文。本回答被提问者和网友采纳
第3个回答  2013-05-07
你把每次循环中sum和m的值输出,你就懂了判断的思路。
比如你输入的数是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颠倒之后的数,如果两者相等,那就是回文数。
第4个回答  2013-05-07
#include<stdio.h>
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;
}
相似回答