您的位置:首页 > 其它

数字反转升级版

2017-01-19 19:35 225 查看
给定一个数,请将该数各个位上数字反转得到一个新数。

这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数之改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。
①
5087462
②
600.084
③
700/27
④
8670%

①
2647805
②
6.48
③
7/72
④
768%


主要思路就是按照题意去做,注意一下边界问题就OK了。

var

 s,s1,s2,s3:string;

 m,j,k,l,f,i:longint;

 c:char;

procedure fz(var ss:string);

var

 s8:string;

 i,j:longint;

begin

 s8:='';

 j:=1;

 for i:=length(ss) downto 1 do

  begin

  s8:=s8+ss[i];

  inc(j);

  end;

 for i:=1 to length(s8) do

  ss[i]:=s8[i];

end;

begin

 read(s);

 for i:=1 to length(s) do

  if (s[i]='.') or (s[i]='/') or(s[i]='%') then

                        begin

                         m:=1;

                         c:=s[i];

                         s1:=copy(s,1,i-1);

                         if i<>length(s) then s2:=copy(s,i+1,length(s))

                                         else s2:=' ';

                        end;

 if m=1 then begin fz(s1);

              if s2<>' ' then fz(s2);

              for i:=1 to length(s1) do

               if s1[i]='0' then inc(f)

                           else break;

              delete(s1,1,f);

              f:=0;

              if c<>'/' then begin for i:=length(s2) downto 1 do

               if s2[i]='0' then inc(f)

                           else break;

              delete(s2,length(s2)-f+1,f); end;

              f:=0;

              if c='/' then begin for i:=1 to length(s2) do

               if s2[i]='0' then inc(f)

                           else break;

              delete(s2,1,f); end;

              f:=0;

              end;

 if m=0 then begin

              fz(s);

              for i:=1 to length(s) do

               if s[i]='0' then inc(f)

                           else break;

              delete(s,1,f);

              end;

 if s2='' then s2:=s2+'0';

 if s1='' then s1:=s1+'0';

 if s='' then s:=s+'0';

 if m=1 then write(s1,c,s2);

 if m=0 then write(s);

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: