c语言编程笔录

首页 >   > 笔记大全

笔记大全

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;
}

代码说明:

  1. 首先将整数转换成字符串,使用sprintf函数实现;
  2. 使用循环遍历字符串的前半部分,并依次与后半部分进行比较;
  3. 如果发现有不相等的字符,则返回0,表示不是回文数;
  4. 如果循环结束后都没有发现不相等的字符,则返回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;
}

代码说明:

  1. 首先将整数转换成字符串,使用sprintf函数实现;
  2. 使用strcpy函数将原字符串复制到另一个字符串;
  3. 使用strrev函数将复制的字符串反转;
  4. 使用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;
}

代码说明:

  1. 使用两个变量original和reverse,original用于保存原整数,reverse用于保存反转后的整数;
  2. 利用循环将原整数反转,每次取原整数的最后一位数字,并将其添加到reverse变量上;
  3. 在循环结束后,若原整数与反转后的整数相等,则返回1,表示是回文数;否则返回0。

通过以上三种算法,我们可以判断一个整数是否为回文数。可以根据实际需求选择合适的算法。