c语言 三种求回文数的算法
更新时间:2023-06-26前言
求回文数的算法是一种常见的编程问题。回文数是指正序和倒序排列都一样的整数。本文将介绍并比较三种使用C语言求回文数的算法,包括暴力破解法、字符串翻转法和数学运算法。
1. 暴力破解法
暴力破解法是一种简单直接的求回文数的方法。我们可以使用循环遍历所有可能的整数,然后将其转换成字符串,并判断其是否与其反转后的字符串相等。
#include <stdio.h>
#include <string.h>
int isPalindrome(int num) {
char str[10];
sprintf(str, "%d", num);
int len = strlen(str);
for (int i = 0; i < len/2; i++) {
if (str[i] != str[len-1-i]) {
return 0;
}
}
return 1;
}
代码说明:
- 首先将整数转换成字符串,使用sprintf函数实现;
- 使用循环遍历字符串的前半部分,并依次与后半部分进行比较;
- 如果发现有不相等的字符,则返回0,表示不是回文数;
- 如果循环结束后都没有发现不相等的字符,则返回1,表示是回文数。
2. 字符串翻转法
字符串翻转法是利用字符串的反转来求回文数的方法。我们可以将整数转换成字符串,然后将其反转,并判断反转后的字符串是否与原字符串相等。
#include <stdio.h>
#include <string.h>
int isPalindrome(int num) {
char str[10];
sprintf(str, "%d", num);
char reversedStr[10];
strcpy(reversedStr, str);
strrev(reversedStr);
return strcmp(str, reversedStr) == 0 ? 1 : 0;
}
代码说明:
- 首先将整数转换成字符串,使用sprintf函数实现;
- 使用strcpy函数将原字符串复制到另一个字符串;
- 使用strrev函数将复制的字符串反转;
- 使用strcmp函数判断原字符串与反转后的字符串是否相等,相等则返回1,表示是回文数;否则返回0。
3. 数学运算法
数学运算法是一种利用数学运算方式判断回文数的方法。该方法通过将原整数反转并与原整数进行比较,判断它们是否相等。
#include <stdio.h>
int isPalindrome(int num) {
int original = num;
int reverse = 0;
while (num > 0) {
reverse = reverse * 10 + num % 10;
num /= 10;
}
return original == reverse ? 1 : 0;
}
代码说明:
- 使用两个变量original和reverse,original用于保存原整数,reverse用于保存反转后的整数;
- 利用循环将原整数反转,每次取原整数的最后一位数字,并将其添加到reverse变量上;
- 在循环结束后,若原整数与反转后的整数相等,则返回1,表示是回文数;否则返回0。
通过以上三种算法,我们可以判断一个整数是否为回文数。可以根据实际需求选择合适的算法。