C语言实现不使用字符串的整数回文数判断
题目来源:LeetCode题库
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
不将整数转为字符串来解决这个问题
思路:获取输入数值后,需要判断该数值是否是负数,如果是负数则不需要进行其他操作直接返回false,如果不是则将输入的数值进行反转,因为反转后的数值可能会越界导致溢出,所以需要用那个更长的数据类型来接收,使用long类型变量来作为接收反转的数值,最后再将反转后的数值与输入值进行对比。进行反转操作时使用while(y > 0)的好处是:一个可以作为反转操作的结束判断,一个是可以对输入数如果是0的话的,直接就返回true
代码实现:
#include<stdio.h>#include<limits.h>#include <stdbool.h>// 判断是否是回文数_Bool isPalindrome(int x){int y = 0;long tmp = 0;// 输入的是负数,直接返回错误if(x < 0){return false;}y = x;// 输入为0直接返回正确while(y > 0){tmp = tmp * 10 + y % 10;y = y / 10;}return tmp == x ? true : false;}int main(void){int num = 0;_Bool result;printf("\r\n请输入一个数字:");scanf("%d", &num);result = isPalindrome(num);printf("\r\n%d回文数的判断结果为:%d\r\n", num, result);return 0;}
执行用时: 12 ms 内存消耗: 5.3 MB
注意:在LeetCode运行程序需要为long类型变量赋初值,否则会出现错误