NOIP1999回文数(pascal)

来源:百度知道 编辑:UC知道 时间:2024/06/24 17:48:13
描述 Description
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=16)进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”

输入格式 Input Format
共两行
第一行为进制数N(2<=N<=16)
第二行为N进制数M(0<=M<=maxlongint)

输出格式 Output Format
共一行
第一行为经过的步数或“Impossible!”
样例输入 Sample Input
9
87

样例输出 Sample Output
STEP=6

时间限制 Time Limitation
各个测试点1s
请给出源程序,谢谢

我优盘没拿回来,这是我学校网站上的例程
program noip99_02;
var a:array[1..10000] of integer;
____l,step,i,n:longint;
____m:string;
procedure work;
__var b:array[1..10000] of integer;
______i:longint;
__begin
____fillchar(b,sizeof(b),0);
____for i:=1 to l do
______b[i]:=a[i]+a[l+1-i];
____for i:=1 to l do
______if b[i]>=n then
______begin
________dec(b[i],n);
________inc(b[i+1]);
______end;
____if b[l+1]>0 then
______inc(l);
____for i:=1 to l do
______a[i]:=b[i];
__end;
function judge:boolean;
__var i:longint;
__begin
____for i:=1 to (l div 2) do
______if a[i]<>a[l+1-i] then
______begin
________judge:=false;
________exit;
______end;
____judge:=true;
__end;
begin
__assign(input,'1999t2.in');
__assign(output,'1999t2.out');
__reset(input);rewrite(output);
__readln(n,m);
__if m[1]=' &