这是《小白C语言编程实战》系列的第18篇。
上一篇:小白C语言编程实战(17):求最大公约数(gcd)和最小公倍数(lcm)
题目
求出所有5位正整数中回文数的个数。回文数是指正读、反读都是同一个数。例如,12321就是一个回文数,从左向右和从右向左读都是12321。
要求
使用printf("%d", count);
输出结果,count
变量中存放回文数个数。
提示
可以定义一个函数inverse(int n, int x)
,对给定的n位整数x
返回其逆序数。例如inverse(5,12345)
的函数值应为54321
;在主函数中穷举所有5位正整数,针对每个数调用inverse
函数,求其逆序数,如果该数与其逆序数相等,则回文数个数增1。
本程序无需输入,结果只输出回文数的个数。
参考代码
#include <stdio.h>
#include <stdlib.h>
/**
对给定的n位整数x返回其逆序数,例如inverse(5,12345)的函数值应为54321
*/
int inverse(int n, int x) {
int a = 0;
while(x>0) {
a = a*10 + x%10;
x /= 10;
}
return a;
}
/**
求出所有5位正整数中回文数的个数
*/
int main(int argc, char *argv[]) {
int count = 0;
int i = 10000;
for(;i<100000;i++) {
if(i == inverse(5, i)) {
count += 1;
}
}
printf("%d", count);//900
return 0;
}