C语言每日一练
2022年3月2日
题目描述
一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数,该数仍为五位数。问该车的速度是多少?新的对称数是多少?
问题分析
这里的对称数也称回文数,在C语言每日一练——第6天:回文数里已经遇到过,所以我直接使用第6天的函数(判断一个整数是否为回文数)。
求出95859
下一个回文数,再将该回文数与95859
的差除以2就能得出该车的车速。
代码实现
#include <stdio.h>
/**
* @brief 判断是否为回文数
* @return 1:是回文数;0:不是回文数
*/
int is_palindrome_number(int num)
{
int old_val = num; //传入的数字
int new_val = 0; //颠倒后的数字
while(num) //当前num的位数大于1(值大于9)
{
//将new_val乘以10,然后加上num的个位数,
//使个位数从原来的后第n位变成前第n位
new_val = new_val * 10 + num % 10;
num /= 10; //num除以10,将个位数去掉
}
if(new_val == old_val) //如果反转后的数字和原数字相同
return 1;
else return 0;
}
int main()
{
int i = 0;
float speed = 0.0f;
for(i = 95859 + 1; ;i++)
{
if(is_palindrome_number(i))
{
printf("新的对称数为%d\n", i);
break;
}
}
speed = (i - 95859) / 2.0f;
printf("该车的速度是%.1f公里/小时\n", speed);
return 0;
}