http://train.usaco.org/usacoprob2?a=C2JqJy82RWk&S=dualpal
题目大意:
双重回文:在2---10进制表示下,至少有2种表示为回文数字
输入:N,S
输出:大于S的前N个回文数字
#include <iostream>
#include <fstream>
using namespace std;
string s = "0123456789";
string convert(int n, int r) //n(10进制)----> string(r进制)
{
string c;
int d; //余数
while(n)
{
d = n%r;
c += s[d];
n /= r;
}
return c;
}
bool isok(string c) //判断回文
{
for(int i = 0, j = c.size() - 1; i < j; i++, j--)
if(c[i] != c[j]) return false;
return true;
}
int main()
{
ifstream fin("dualpal.in");
ofstream fout("dualpal.out");
int a, b, n, m;
string c;
while(fin >> a >> b)
{
n = 0;
for(int i = b + 1; n < a; i++)
{
m = 0;
for(int j = 2; j <= 10; j++)
{
if(isok(convert(i, j))) m++;
if(m >= 2) break;
}
if(m >= 2)
{
n++;
fout << i << endl;
}
}
}
return 0;
}