usaco 1.2:Palindromic Squares

描述

回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。

给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。

 格式

PROGRAM NAME: palsquare

INPUT FORMAT:

(file palsquare.in)

共一行,一个单独的整数B(B用十进制表示)。

OUTPUT FORMAT:

(file palsquare.out)

每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。

 SAMPLE INPUT

10 

 SAMPLE OUTPUT

1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
题的关键是进制转化,经典短除法
基本方法

n进制转为10进制:设某数(n进制)为A1A2A3……Am

那么转化成的十进制数X=Am*n^(m-1)+Am-1*n^(m-2)+……+A2*n^1+A1*n^0

10进制转为n进制:设某数(10进制)为X

使用短除法,用X除以n写出余数,再将商作为被除数再除以n并取余……最后将每次取得的余数逆向读取,所得的就是转化后的数。

这两种方法也可以扩展到n转m进制,或是m转n进制,只要把后面的计算用m进制高精度数处理即可。但是我们说的10进制,其实是指运算最快的进制(对电脑来说事实上是二进制,输出的时候才会自动转换成10进制)。这时候用上面的组合比较有效率。

 

把十进制s转换成b进制
PASCAL

while s<>0 do
    begin
      inc(j);
      k[j]:=s mod b;
      s:=s div b;
    end;

 

其余都好办

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值