dualpal解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
给出N和S,找出大于S的前N个双回文数。
双回文数定义:在二进制至十进制中的两种(或两种以上)进制下是回文数。
【数据范围】
1<=N<=15
0<S<10000
本题不需要使用大于4字节的整型变量
【输入样例】
3 25
【输出样例】
26
27
28
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
没难度。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
很可惜,又不是一遍AC。(在main中,“--N”一句忘了写了。)
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
/*
ID: icedrea1
PROB: dualpal
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; int N,S; char to(int x) { return x-+''; }
string change(int x,int B)
{
string num;
while(x) { num=to(x%B)+num; x/=B; }
return num;
}
bool isPal(string num)
{
for(int i=;i!=num.size();++i)
if(num[i]!=num[num.size()--i]) return false;
return true;
} int main()
{
ifstream in("dualpal.in");
ofstream out("dualpal.out"); int cnt;
in>>N>>S;
while(N)
{
cout<<"N="<<N<<endl;
++S; cnt=;
for(int B=;B<=;++B) cnt+=isPal(change(S,B));
if(cnt>=) { out<<S<<endl; --N; }
} in.close();
out.close();
return ;
}