主题:我错哪了?
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个 10进制数 56,将 56加 65(即把56从右向左读),得到 121是一个回文数。又如,对于10进制数87,
STEPl: 87+78= 165 STEP2: 165+561= 726
STEP3: 726+627=1353 STEP4:1353+3531=4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=10,N=16)进制数 M,求最少经过几步可以得到回
文数。如果在30步以内(包含30步)不可能得到回文数,则输出’no’。
输入文件3.in,一行。第一行,只有一个整数,表示N进制。第二行是一个字符串,表示N进制数 M。
输出文件3.out,只有一行,为一个整数(表示最少步数)或一个字符串’no’。
样例:
输入:9
87
输出:6
var a,b,c:array[1..200] of 0..9;
n,n1,n2:string; lena,lenb,lenc,i,x:integer;
begin
write('Input minuend:'); readln(n1);
write('Input subtrahend:'); readln(n2);
if (length(n1)<length(n2)) or (length(n1)=length(n2)) and (n1<n2)
then begin
n:=n1;n1:=n2;n2:=n; write('-')
end;
lena:=length(n1); lenb:=length(n2);
for i:=1 to lena do a[lena-i+1]:=ord(n1[i])-ord('0');
for i:=1 to lenb do b[lenb-i+1]:=ord(n2[i])-ord('0');
i:=1;
while (i<=lena) or(i<=lenb) do
begin
if a[i]<b[i]then begin a[i+1]:= a[i+1] -1;a[i]:=a[i]+10; end;
c[i] := a[i]-b[i] ;
i := i + 1
end;
lenc:=i;
while (c[lenc]=0) and (lenc>1) do dec(lenc);
for i:=lenc downto 1 do write(c[i]); writeln
end.
STEPl: 87+78= 165 STEP2: 165+561= 726
STEP3: 726+627=1353 STEP4:1353+3531=4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=10,N=16)进制数 M,求最少经过几步可以得到回
文数。如果在30步以内(包含30步)不可能得到回文数,则输出’no’。
输入文件3.in,一行。第一行,只有一个整数,表示N进制。第二行是一个字符串,表示N进制数 M。
输出文件3.out,只有一行,为一个整数(表示最少步数)或一个字符串’no’。
样例:
输入:9
87
输出:6
var a,b,c:array[1..200] of 0..9;
n,n1,n2:string; lena,lenb,lenc,i,x:integer;
begin
write('Input minuend:'); readln(n1);
write('Input subtrahend:'); readln(n2);
if (length(n1)<length(n2)) or (length(n1)=length(n2)) and (n1<n2)
then begin
n:=n1;n1:=n2;n2:=n; write('-')
end;
lena:=length(n1); lenb:=length(n2);
for i:=1 to lena do a[lena-i+1]:=ord(n1[i])-ord('0');
for i:=1 to lenb do b[lenb-i+1]:=ord(n2[i])-ord('0');
i:=1;
while (i<=lena) or(i<=lenb) do
begin
if a[i]<b[i]then begin a[i+1]:= a[i+1] -1;a[i]:=a[i]+10; end;
c[i] := a[i]-b[i] ;
i := i + 1
end;
lenc:=i;
while (c[lenc]=0) and (lenc>1) do dec(lenc);
for i:=lenc downto 1 do write(c[i]); writeln
end.