[Rqnoj-148][NOIP1999]回文数

回文数
高精度,比较水,好像我的代码有点长,不过我觉得这种题套模版是个好习惯~
代码:

type
    hp=array[0..10000] of longint;
var
    n,ans:longint;
    a:hp;
function d(c:char):longint;
begin
     case c of
          '0':d:=0;  '1':d:=1;  '2':d:=2; '3':d:=3;  '4':d:=4;
          '5':d:=5;  '6':d:=6;  '7':d:=7; '8':d:=8;  '9':d:=9;
          'A':d:=10; 'B':d:=11; 'C':d:=12; 'D':d:=13; 'E':d:=14; 'F':d:=15;
     end;
end;
function ok(a:hp):boolean;
var
   i,j:longint;
begin
     i:=1; j:=a[0]; ok:=true;
     while i<j do begin
          if a[i]<>a[j] then begin ok:=false; break; end;
          inc(i); dec(j);
     end;
end;
function fan(a:hp):hp;
var
   b:hp;
   i:longint;
begin
     fillchar(b,sizeof(b),0);
     b[0]:=a[0]; for i:=1 to a[0] do b[a[0]-i+1]:=a[i];
     fan:=b;
end;
procedure h_jia(a,b:hp;var c:hp);
var
   i,len:longint;
begin
     if a[0]>b[0] then len:=a[0] else len:=b[0];
     fillchar(c,sizeof(c),0);
     for i:=1 to len do begin
         c[i]:=c[i]+a[i]+b[i];
         c[i+1]:=c[i+1]+c[i] div n;
         c[i]:=c[i] mod n;
     end;
     if c[len+1]<>0 then inc(len);
     c[0]:=len;
end;
procedure main;
var
    s:string;
    i:longint;
begin
     readln(n); readln(s); fillchar(a,sizeof(a),0);
     a[0]:=length(s);
     for i:=1 to a[0] do a[a[0]-i+1]:=d(s[i]);
     ans:=-1;
     for i:=0 to 30 do begin
         if ok(a) then begin ans:=i; break end;
         h_jia(a,fan(a),a);
     end;
     if ans=-1 then write('Impossible') else write(ans);
end;
begin
     main;
end.      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值