社区讨论

Pascal 90分,输出超行求破

P1553数字反转(升级版)参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mi4ebtg6
此快照首次捕获于
2025/11/18 17:53
4 个月前
此快照最后确认于
2025/11/18 17:53
4 个月前
查看原帖
*其他数据点全部正确,#9与#10数据点都提示Too long on line 0(第0行过长),什么鬼?*
*以下是本人编译器的源码,源码里带了assign所以不要随便直接往洛谷上测,记得把所有“assign”和“close”什么的删掉才能用*
PASCAL
program P1553(input,output);
var
  s:string;
  i,j,p:longint;
  flag:boolean;
begin
  assign(input,'input.ini');
  reset(input);
  assign(output,'output.txt');
  rewrite(output);
  readln(s);
  if (pos('/',s)=0)and(pos('%',s)=0)and(pos('.',s)=0) then//整数
    begin
      if (length(s)=1)and(s[1]='0') then
        begin
          writeln('0');
          close(input);
          close(output);
          halt;
        end
                                  else
        begin
          for j:=length(s) downto 1 do
            if s[j]='0' then delete(s,j,1) else break;
          for i:=length(s) downto 1 do
            write(s[i]);
          close(input);
          close(output);
          halt;
        end;
    end;
  if pos('/',s)<>0 then//分数
    begin
      p:=pos('/',s);
      for j:=p-1 downto 1 do
      if s[j]='0' then delete(s,j,1) else break;
      p:=pos('/',s);
      if p=1 then write('0') else for i:=p-1 downto 1 do write(s[i]);
      write('/');
      for j:=length(s) downto p+1 do
        if s[j]='0' then delete(s,j,1) else break;
      for i:=length(s) downto p+1 do
        write(s[i]);
      close(input);
      close(output);
      halt;
    end;
  if pos('%',s)<>0 then//百分数
    begin
      flag:=false;
      for i:=1 to length(s) do
        if (s[i]<>'0')or(s[i]<>'%') then flag:=true;
      if flag then
        begin
          for j:=length(s)-1 downto 1 do
            if s[j]='0' then delete(s,j,1) else break;
          if length(s)<>1 then
            begin
              for i:=length(s)-1 downto 1 do
                write(s[i]);
            end
                          else
            write('0');
          write('%');
          close(input);
          close(output);
          halt;
        end
              else
        begin
          write('0%');
          close(input);
          close(output);
          halt;
        end;
    end;
  if pos('.',s)<>0 then//小数
    begin
      p:=pos('.',s);
      for j:=p-1 downto 1 do
      if s[j]='0' then delete(s,j,1) else break;
      p:=pos('.',s);
      if p=1 then write('0');
      for i:=p-1 downto 1 do
        write(s[i]);
      write('.');
      if (s[p+1]='0')and(p+2>length(s))then begin write('0');close(input);close(output);halt;end
      else
        begin
          j:=p+1;
          if (s[j]='0')and(s[j+1]<>'0') then delete(s,j,1) else
            begin
              for j:=p+1 to length(s) do
                if s[j]='0' then delete(s,j,1) else break;
            end;
          for i:=length(s) downto p+1 do
            write(s[i]);
        close(input);
        close(output);
        halt;
      end;
    end;
end.   

回复

4 条回复,欢迎继续交流。

正在加载回复...