This one is the last for Chapter 1's Section 1.2!
/*
ID: victor4
PROG: dualpal
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
inline char to_char(int c){
if(c >= 10)
return c - 10 + 'A';
return c + '0';
}
string tobase(int num, int base){
string ret;
int div = base;
while(div < num)
div *= base;
for(div /= base;;){
ret += to_char(num / div);
// get remainder
num = num % div;
// next
if(div < 2) break;
div /= base;
}
return ret;
}
string reverse_str(string str){
reverse(str.begin(), str.end());
return str;
}
int main() {
ofstream fout ("dualpal.out");
ifstream fin ("dualpal.in");
int N, S;
fin >> N >> S;
while(N){
if(++S > 100000)
break;
int num = 0;
for(int j = 2; j <= 10; ++j){
// fail: I put S * S instead of S
string check = tobase(S, j);
if(check == reverse_str(check) && ++num >= 2){
--N;
fout << S << endl;
break;
}
}
}
return 0;
}
No comments:
Post a Comment