我们说一个数字如果从左到右和从右到左是一样得就是回文数。例如75457就是一个回文数。当然,这性质还依赖它的进制。17在十进制下不是回文数,不过在二进制下就是回文数了(10001) 。现在就是要一个数在2到16进制下是否回文数。 Input 输入数据由多个整数构成。每个给出的数字 0 < n < 50000各占一行,并且都是以十进制形式给出。输入以零为结束。 Output 你的程序要输出令所给数 I 是回文数的进制。如果这个数在2到16进制里都不是回文数,你的程序就要输出这个数不是回文数的信息。 Sample Input 17 19 0 Sample Output Number 17 is palindrom in basis 2 4 16 Number 19 is not a palindrom c++
时间: 2024-04-24 14:21:33 浏览: 138
#include <iostream>
#include <string>
#include <algorithm>
bool isPalindrome(const std::string& num, int base) {
std::string convertedNum = num;
std::reverse(convertedNum.begin(), convertedNum.end());
return num == convertedNum;
}
std::string convertToBase(int num, int base) {
std::string convertedNum;
while (num > 0) {
int remainder = num % base;
convertedNum += std::to_string(remainder);
num /= base;
}
std::reverse(convertedNum.begin(), convertedNum.end());
return convertedNum;
}
void checkPalindrome(int num) {
std::cout << "Number " << num << " is";
bool palindromeFound = false;
for (int base = 2; base <= 16; base++) {
std::string convertedNum = convertToBase(num, base);
if (isPalindrome(convertedNum, base)) {
std::cout << " palindrom in basis " << base;
palindromeFound = true;
}
}
if (!palindromeFound) {
std::cout << " not a palindrom";
}
std::cout << std::endl;
}
int main() {
int num;
while (std::cin >> num && num != 0) {
checkPalindrome(num);
}
return 0;
}
阅读全文