最新Noip真题
在这里,数字用字符串表示(当然也可以用其他方法),因为方便处理。
n元加法是本课题的亮点,处理如下:
1)字符->;数字,可以用数组来简化程序,也就是数字和字符数组。
2)做加法,保留所有位数,进位,就像做高精度加法一样。
g是进位。
常数
步骤:整数= 0;
chars:数组[0..15] of char=('0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' A ',' B ',' C ',' D ',' E ',' F ');
定义变量
digit:整数的数组[char];
I,n,g:整数;
m,s:字符串;
ok:布尔型;
开始
for i:=0到9 do digit[char(ord(' 0 ')+I)]:= I;
for i:=0到5 do digit[char(ord(' A ')+I)]:= I+10;
写(' n = ');readln(n);
写(' m = ');readln(s);
for I:= 1 to length(s)do s[I]:= up case(s[I]);
重复
ok:=真;
对于i:=1到长度(s) div 2 do
如果s[I]& lt;& gts[长度(s)+1-i]那么ok:= false;
如果可以,则断开;
inc(步);
m:= s;g:= 0;
对于I:=长度(m)向下到1 do
开始
s[I]:= chars[(digit[m[I]]+digit[m[length(m)+1-I]]+g)mod n];
g:=(digit[m[I]]+digit[m[length(m)+1-I]]+g)div n;
结束;
如果g & gt0然后s:= chars[g]+s;
直到步骤& gt=30;
如果可以的话
writeln('STEP= ',STEP)
其他
writeln('不可能');
结束。
没问题,请采纳。如果你有任何问题,请提问。