C++ 判断一个整数是否是回文的两种方法

时间:2024-10-18 17:40:15

// 判断一个整数是否是回文:

// 方法1:将数拆分出来存入数组,比较前后对应位置上的数是否相同

#include <iostream>
using namespace std;

bool isPalindrome(int x){
   int store[100]; // 用于存储该数字中的每个数 
   int i = 0; 
   
   if(x<0)   // 如果数字为负数,则不是回文数
      return false; 
      
   //提取数字的各个位并存储在数组中
   while(x){
      store[i]=x%10;     // 每次取数的末尾存入数组中 
      i++; 
      x/=10; // 去掉最后一位
   }
   // 比较前后对应位置上的数是否相同   
   for(int j=0;j<i/2;j++){
      if(store[j]!=store[i-1-j]){   // i在i++时多1,所以要减1 
	      return false; 
	  }
   }
   return true;
}

int main(){
   int x;
   cin >> x;
   if(isPalindrome(x)){ 
      cout<<" is a palindrome." ; 
   } else {
      cout<<" is not a palindrome." ; 
   }
}

// 判断一个整数是否是回文:

// 方法2:将数反转后与原数进行比较,循环只是循环一半的数进行比较是否与进行计算后的原数相等。

#include <iostream>
#include <string>
using namespace std;
 
bool isPalindrome(int x) {
    // 负数和10的倍数不能是回文
    if (x < 0 || (x != 0 && x % 10 == 0)) {
        return false;
    }
 
    int reverseNum = 0;
    // 当x>或=reverseNum时进行循环  
    // eg:x=123321(偶数)时:经过循环x=123,reverseNum=123;
    // eg:x=12321(奇数):经过循环x=12,reverseNum=123/10=12
    while (x > reverseNum) {  
        reverseNum = reverseNum* 10 + x % 10;
        x /= 10;
    }

    //偶数    奇数
    return  reverseNum == x || reverseNum / 10 == x;
 
}
 
int main() {
    int num;
    std::cout << "Enter an integer: ";
    std::cin >> num;
 
    if (isPalindrome(num)) {
        cout << num << " is a palindrome." << endl;
    } else {
        cout << num << " is not a palindrome." <<endl;
    }
 
    return 0;
}