21xrx.com
2024-09-20 06:07:08 Friday
登录
文章检索 我的文章 写文章
C++编程:如何判断一个数是否为回文数的函数
2023-06-26 17:17:01 深夜i     --     --
C++编程 回文数 判断 函数

回文数,就是正着读和反着读都一样的数字,如121、1221等。那么,如何用C++编写一个函数来判断一个数是否为回文数呢?

首先,我们可以将数字转换成字符串,再判断字符串是否为回文字符串。具体实现如下:


#include <iostream>

#include <string>

using namespace std;

bool isPalindrome(int num) {

  //将数字转换成字符串

  string str = to_string(num);

  int len = str.length();

  //判断字符串是否为回文字符串

  for(int i=0; i<len/2; i++) {

    if(str[i] != str[len-i-1])

      return false;

    

  }

  return true;

}

int main() {

  int num = 121;

  if(isPalindrome(num))

    cout << num << "是回文数" << endl;

   else

    cout << num << "不是回文数" << endl;

  

  return 0;

}

上述代码中,`isPalindrome`函数首先将数字转换成字符串,然后使用双指针法判断字符串是否为回文字符串,最后返回布尔值。在`main`函数中,我们可以调用该函数来判断一个数是否为回文数。

当然,如果我们需要优化一下代码的效率,可以不将数字转换成字符串,直接进行判断。具体实现如下:


#include <iostream>

using namespace std;

bool isPalindrome(int num) {

  if(num < 0 || (num % 10 == 0 && num != 0))

    return false;

  

  int reversedNum = 0;

  while(num > reversedNum) {

    reversedNum = reversedNum * 10 + num % 10;

    num /= 10;

  }

  return num == reversedNum || num == reversedNum / 10;

}

int main() {

  int num = 121;

  if(isPalindrome(num))

    cout << num << "是回文数" << endl;

   else

    cout << num << "不是回文数" << endl;

  

  return 0;

}

上述代码中,我们使用了两个指针,一个指向数字的头部,一个指向数字的尾部。每次取出尾部的数字,加到`reversedNum`的末尾,同时将头部指针往后移。当头部指针大于等于尾部指针时,循环结束。最后,判断`num`和`reversedNum`是否相等,或者`num`是否等于`reversedNum / 10`,这是因为如果`num`的位数为奇数,我们需要将`reversedNum`除以10去掉中间的一位数。

无论是哪种实现方式,只要能够正确地判断一个数是否为回文数就可以。总之,在C++编程中,我们需要灵活运用算法和数据结构,理解代码的内在逻辑,以写出高效、简洁、易读的代码。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复