如果一個數從左往右讀和從右往左讀都是一樣,那麼這個數就叫做“回文數”。例如,12321就是一個回文數,而77778就不是。當然,回文數的首和尾都應是非零的,是以0220就不是回文數。
事實上,有一些數(如21),在十進制時不是回文數,但在其它進制(如二進制時為10101)時就是回文數。
編一個程式,從檔案讀入兩個十進制數
• N (1 <= N <= 15)
• S (0 < S < 10000)
然後找出前N個滿足大于S且在兩種以上進制(二進制至十進制)上是回文數的十進制數,輸出到檔案上。
本問題的解決方案不需要使用大于4位元組的整型變量。
Input隻有一行,用空格隔開的兩個數N和S。
OutputN行, 每行一個滿足上述要求的數,并按從小到大的順序輸出。
Sample Input Sample Outputconst
f:array[0..9]of char=('0','1','2','3','4','5','6','7','8','9');
var
i,j,k,m,n,s:longint;
s1:string;
function check(i:longint):boolean;
var
j,k,l,kk,base:longint;
dd:boolean;
begin
kk:=0;
for base:=2 to 10 do
begin
s1:='';
dd:=true;
j:=i;
while j<>0 do
begin
k:=j mod base;
j:=j div base;
s1:=s1+f[k];
end;
k:=length(s1);
for l:=1 to k div 2 do
if s1[l]<>s1[k-l+1] then dd:=false;
if dd then inc(kk);
if kk>=2 then exit(true);
end;
exit(false);
end;
begin
readln(n,m);
s:=0;
while s
begin
inc(m);
if check(m) then begin inc(s);writeln(m);end;
end;
end.