题目大意:判断一个数是不是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; }