<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->#include<iostream>
#include<stack>
#include<vector>
usingnamespacestd;
boolIsPalindrom(stack<int>&s,constvector<int>&v)
{//判断是否是"回文"
intindex=0;
while(!s.empty())
{
if(s.top()!=v[index++])
{
returnfalse;
}
s.pop();
}
returntrue;
}
boolDividN(intnum,intn)
{//n进制除法
stack<int>s1;
vector<int>v1;
inttmp;
while(num!=0)
{
tmp=num%n;
s1.push(tmp);
v1.push_back(tmp);
num=num/n;
}
returnIsPalindrom(s1,v1);
}
intmain(void)
{
intn,i;
while(cin>>n&&n!=0)
{
boolisFirst=true;//第一个是回文的进制
for(i=2;i<=16;++i)
{
if(DividN(n,i))
{
if(isFirst==true)
{
cout<<"Number"<<n<<"ispalindrominbasis"<<i;
isFirst=false;
}
else
{
cout<<""<<i;
}
}
}
if(isFirst==true)
{//不是回文
cout<<"Number"<<n<<"isnotapalindrom";
}
cout<<endl;
}
return0;
}
#include<stack>
#include<vector>
usingnamespacestd;
boolIsPalindrom(stack<int>&s,constvector<int>&v)
{//判断是否是"回文"
intindex=0;
while(!s.empty())
{
if(s.top()!=v[index++])
{
returnfalse;
}
s.pop();
}
returntrue;
}
boolDividN(intnum,intn)
{//n进制除法
stack<int>s1;
vector<int>v1;
inttmp;
while(num!=0)
{
tmp=num%n;
s1.push(tmp);
v1.push_back(tmp);
num=num/n;
}
returnIsPalindrom(s1,v1);
}
intmain(void)
{
intn,i;
while(cin>>n&&n!=0)
{
boolisFirst=true;//第一个是回文的进制
for(i=2;i<=16;++i)
{
if(DividN(n,i))
{
if(isFirst==true)
{
cout<<"Number"<<n<<"ispalindrominbasis"<<i;
isFirst=false;
}
else
{
cout<<""<<i;
}
}
}
if(isFirst==true)
{//不是回文
cout<<"Number"<<n<<"isnotapalindrom";
}
cout<<endl;
}
return0;
}
本文介绍了一个C++程序,该程序用于判断一个给定的十进制整数在2到16进制范围内是否存在至少一种进制下能够形成回文数。通过除基取余法转换数字并利用栈来验证回文特性。
527

被折叠的 条评论
为什么被折叠?



