大家好,这里是一个刚接触C语言的小萌新
最近突发奇想,打算把一些最近做的题目发在CSDN上,一方面是记录一下自己的学习过程,一方面也欢迎大佬来讨论,分享一些更好的解法。
题目要求:编译一个函数,用于判断一个整数是否是回文数(指正着读倒着读一样的数),并用该函数找出10000以内的回文数。
看到回文数,我第一反应是用除法和求余来将数字一位一位分离,用数组储存各数位的数字。再用for循环遍历数组,判断前后的数字是否对应相等。
#include<stdio.h>
#include<stdbool.h>//引用该头文件才能使用bool
bool Palindrome(int n) {//bool型函数只会返回true或false,占1字节,比int型(4字节)更小
int a[5]={};//n至多5位
int i;
for(i=0;n;i++){//a[i]先拿走n的个位,再让n除十
a[i]=n%10;
n/=10;
}
int k=i;//for结束后,i代表n是i位数,即a中前i个数有意义
for(k=0;k<i;k++)//依次比较是否相同
if(a[k]!=a[i-k-1])break;
if(i!=k)return false;//如果中途没有break,结束后i=k
else return true;
}
int main (){
int sum=0;
for(int j=1;j<=10000;j++)
if (Palindrome(j))
printf("第%d个是%d\n",++sum,j);//输出,sum用于计数
printf("共有%d个回文数\n",sum);
return 0;
}
运行结果:
小萌新能力有限,解法不一定完美,欢迎大家讨论。