题目大意:判断一个数是不是palindrom。不限于十进制,可以在任何进制下判断。
解法:还好,数字的范围不大,int类型足够搞定。方法就是从2进制开始,先把数字转换成2进制,判断是否对称,然后转换成3进制,直到16进制。这里的进制转换方法可以留意一下。
参考代码:
#include<iostream> using namespace std;
bool isPalindrom(int, int); int main(){
int i,n; while(cin>>n&&n!=0){
bool base[17]={false}, flag=false;;
for(i=2;i<=16;i++){
if(isPalindrom(n,i)==true){
base[i]=true;
flag=true;
}
}
if(flag){
cout<<"Number "<<n<<" is palindrom in basis";
for(i=2;i<=16;i++){
if(base[i])
cout<<' '<<i;
}
cout<<endl;
}else{
cout<<"Number "<<n<<" is not a palindrom"<<endl;
}
} return 0;
} bool isPalindrom(int n,int base){
char s[16];
int j=0,k; while(n!=0){ //十进制到任意进制的转换
s[j]='0'+n%base;
n/=base;
j++;
}
for(k=0;k<j/2;k++){
if(s[k]==s[j-k-1])
continue;
else
return false;
}
return true;
}