/* ID: modengd1 PROG: dualpal LANG: C++ */ #include <iostream> #include <stack> #include <stdio.h> #include <string.h> using namespace std; char leter[20]={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘I‘,‘J‘}; //进制转换,将x转化为base进制的数的字符串表示形式存入out数组 void changetheBase(int x,int base,char out[60]) { stack<char> S; int i=0; while(x>0) { S.push(leter[x%base]); x/=base; } for(i=0;!S.empty();i++) { out[i]=S.top(); S.pop(); } out[i]=0; } //检测一个以‘\0‘结尾的字符串是不是回文串 bool isPalindromic(char input[60]) { int temp[60]; int len=strlen(input); for(int i=0;i<len;i++) { temp[len-i-1]=input[i]; } for(int i=0;i<len;i++) { if(input[i]!=temp[i]) return false; } return true; } bool islegal(int x) { char out[60]; int ans=0; for(int i=2;i<=10;i++) { changetheBase(x,i,out); if(isPalindromic(out)) { ans++; } if(ans>=2) return true; } return false; } int main() { int N,S,ans; freopen("dualpal.in","r",stdin); freopen("dualpal.out","w",stdout); scanf("%d%d",&N,&S); ans=0; for(int i=S+1;ans<N;i++) { if(islegal(i)) { cout<<i<<endl; ans++; } } return 0; }
时间: 2025-01-20 11:53:31