一大堆的福利之【USACO题库】 Dual Palindromes双重回文数

题目描述

如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。

事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。 

编一个程序,从文件读入两个十进制数



  • N (1 <= N <= 15)
  • S (0 < S < 10000)

然后找出前N个满足大于S且在两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。 

本问题的解决方案不需要使用大于4字节的整型变量。


PROGRAM NAME: dualpal


INPUT FORMAT


只有一行,用空格隔开的两个数N和S。


SAMPLE INPUT (file dualpal.in)


3 25


OUTPUT FORMAT


N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。


SAMPLE OUTPUT (file dualpal.out)


26

27

28

var
        n,i,j,l,t,z,s:longint;
        bj:boolean;
        a:array [1..50] of longint;
begin
        readln(n,i);
        while z<n do
        begin
                inc(i); s:=0;
                for j:=2 to 10 do
                begin
                        l:=0; t:=i; bj:=true;
                        while t>0 do
                        begin
                                inc(l);
                                a[l]:=t mod j;
                                t:=t div j;
                        end;
                        for t:=1 to l div 2 do
                                if a[t]<>a[l+1-t] then
                                begin bj:=false; break; end;
                        if bj then begin inc(s); if s=2 then break; end;
                end;
                if s=2 then begin writeln(i); inc(z); end;
        end;
end.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值