ZOJ1078 Palindrom Numbers

来源:互联网 发布:手机内置sd卡数据恢复 编辑:程序博客网 时间:2024/04/28 14:00
#include <iostream>
#include 
<stack>
#include 
<vector>
using namespace std;

bool IsPalindrom(stack<int>& s,const vector<int>& v)
{
//判断是否是"回文"
    int index = 0;
    
while(!s.empty())
    {
        
if(s.top()!=v[index++])
        {
            
return false;
        }
        s.pop();
    }
    
return true;
}
bool DividN(int num,int n)
{
//n进制除法
    stack<int> s1;
    vector
<int> v1;
    
int tmp;
    
while (num!=0)
    {
        tmp 
= num%n;
        s1.push(tmp);
        v1.push_back(tmp);
        num 
= num/n;
    }
    
return IsPalindrom(s1,v1);
}
int main(void)
{
    
int n,i;
    
    
while(cin>>n&&n!=0)
    {
        
bool isFirst = true;//第一个是回文的进制
        for (i=2;i<=16;++i)
        {
            
if (DividN(n,i))
            {
                
if (isFirst==true)
                {
                    cout
<<"Number "<<n<<" is palindrom in basis "<<i;
                    isFirst 
= false;
                }
                
else
                {
                    cout
<<" "<<i;
                }
                
            }
        }
        
if (isFirst==true)
        {
//不是回文
            cout<<"Number "<<n<<" is not a palindrom";
        }
        cout
<<endl;
    }
    
return 0;
}
原创粉丝点击