给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入:x = 121 输出:true
示例 2:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。
我们首先来看看代码:
#include <stdio.h>
#include <stdbool.h> //使得可以使用bool类型。
#include <string.h>
bool isPalindrome(int x) {
// 负数不是回文数
if (x < 0) {
return false;
}
// 将整数转换为字符串
char num[20];
sprintf(num, "%d", x);
// 获取字符串长度
int length = strlen(num);
// 判断是否是回文数
for (int i = 0; i < length / 2; i++) {
if (num[i] != num[length - i - 1]) {
return false; // 如果有不匹配的字符,返回 false
}
}
return true; // 如果所有字符都匹配,返回 true
}
int main() {
int number;
printf("请输入一个整数:");
scanf("%d", &number);
if (isPalindrome(number)) {
printf("%d 是回文数。\n", number);
} else {
printf("%d 不是回文数。\n", number);
}
return 0;
}
首先我们需要去判断它是不是一个负数,因为如果是一个负数的话,那么它一定不是一个回文数,上面的例题二有写。
然后我们要去判断这个数的前半部分和后半部分的话,我么是不是得知道这个数有几位?我使用的是进阶做法,将我们的整数格式化为字符串,这样做的效率会更加高。当我们知道了他又几位之后,我们就可以使用for循环的遍历了。然后我们就去分析正着的数和反着的数是不是一样的,如果一样的话,就是回文数。不一样的话,就不是。但是有一个不错的想法是这样的,假如说我们的x=12321
那我们是不是可以只让我们的i遍历到这个数的一半,我们让前半段和后半段做比较,如果相同,是不是也能说明这个是一个回文数。
什么是sprintf
函数?
C 库函数 int sprintf(char \*str, const char \*format, ...)
发送格式化输出到 str
所指向的字符串。
下面是 sprintf() 函数的声明。
int sprintf(char *str, const char *format, ...)
str
-- 这是指向一个字符数组的指针,该数组存储了 C 字符串。format
-- 这是字符串,包含了要被写入到字符串 str
的文本。它可以包含嵌入的 format
标签,format
标签可被随后的附加参数中指定的值替换,并按需求进行格式化。如果我们想要把一个整数转换成字符串的话,我们可以这样:
sprintf(str, "%d", format);
如果是将字符串直接复制到目标字符数组中。
我们就可以使用%s
sprintf(str, "%s", format);
我在本次题目中遇到过一下几个问题:
我使用的是C99的解释器,但是我这里提示到了说是不能识别到bool类型。
可能原因有一下几个:
<stdbool.h>
头文件C99
或更新标准然后我加入了<stdbool.h>的头文件之后,发现就可以使用这个类型了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。