永发信息网

题目:[NOIP1999]回文数 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之

答案:2  悬赏:0  手机版
解决时间 2021-02-05 00:26
  • 提问者网友:活着好累
  • 2021-02-04 18:36
题目:[NOIP1999]回文数 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之
最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-02-04 18:55
本题也很简单,只是考查了一些基本编程能力,没有什么难度可言。只要细心,本题的分是可以轻松拿到手的。
这里数采用字符串表示(其他方法当然也可以),因为处理方便。
N进制的加法是本题的重头戏,处理如下:
1)字符->数字,可以用数组来简化程序,即digit和chars数组
2)做加法,保留各位数字和进位,就想做高精度加法一样。
g是进位。
const
step:integer=0;
chars:array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var
digit:array[char] of integer;
i,n,g:integer;
m,s:string;
ok:boolean;
begin
for i:=0 to 9 do digit[char(ord('0')+i)]:=i;
for i:=0 to 5 do digit[char(ord('A')+i)]:=i+10;
write('n='); readln(n);
write('m='); readln(s);
for i:=1 to length(s) do s[i]:=upcase(s[i]);
repeat
ok:=true;
for i:=1 to length(s) div 2 do
if s[i]<>s[length(s)+1-i] then ok:=false;
if ok then break;
inc(step);
m:=s; g:=0;
for i:=length(m) downto 1 do
begin
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;
end;
if g>0 then s:=chars[g]+s;
until step>=30;
if ok then
writeln('STEP=',step)
else
writeln('Impossible');
end.

没问题请采纳,有问题追问。
全部回答
  • 1楼网友:woshuo
  • 2021-02-04 19:53
问一下这个题 在什么地方可以提交 我想做做追问没有办法查到的
这是我们老师说的
麻烦解决一下
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯