记录编号 12203 评测结果 AAAAAAAAAA
题目名称 表达式转换 最终得分 100
用户昵称 GravatarAchilles 是否通过 通过
代码语言 Pascal 运行时间 0.003 s
提交时间 2009-09-06 11:38:11 内存使用 0.12 MiB
显示代码纯文本
program express;   
var  
   s:string;
   t,n,j,p2,i,temp:longint;
   sz:array[1..1000]of record
     size,num:longint;
     f:char;
   end;
function p(s:string):string;
var
   i,t2:longint;
   s1,s2:string;   
begin  
     while (s[1]='(')and(s[length(s)]=')') do  
     begin  
        t:=0;   
        p2:=0;   
        for j:=2 to length(s)-1 do  
        begin  
            if s[j]='(' then t:=t+1;   
            if s[j]=')' then t:=t-1;   
            if t<0 then begin  
               p2:=1;   
               break;   
            end;   
        end;   
        if p2=0 then begin  
           delete(s,1,1);   
           delete(s,length(s),1);   
        end  
        else break;   
     end;   
     t:=0;   
     t2:=0;   
     for i:=length(s) downto 1 do  
     begin  
         if (s[i]in['+','-'])and(t=0) then begin  
            s1:=copy(s,1,i-1);   
            s1:=p(s1);   
            s2:=copy(s,i+1,length(s)-i);   
            s2:=p(s2);   
            s:=s1+s2+s[i];   
            t2:=1;   
            break;   
         end;   
         if s[i]=')' then t:=t+1;   
         if s[i]='(' then t:=t-1;   
     end;   
     if t2=0 then begin  
         t:=0;   
         for i:=length(s) downto 1 do  
         begin  
              if (s[i]in['*','/'])and(t=0) then begin  
                 s1:=copy(s,1,i-1);   
                 s1:=p(s1);   
                 s2:=copy(s,i+1,length(s)-i);   
                 s2:=p(s2);   
                 s:=s1+s2+s[i];   
                 t2:=1;   
                 break;   
              end;   
              if s[i]=')' then t:=t+1;   
              if s[i]='(' then t:=t-1;   
         end;   
     end;   
     if t2=0 then begin  
         t:=0;   
         for i:=length(s) downto 1 do  
         begin  
              if (s[i]='^')and(t=0) then begin  
                 s1:=copy(s,1,i-1);   
                 s1:=p(s1);   
                 s2:=copy(s,i+1,length(s)-i);   
                 s2:=p(s2);   
                 s:=s1+s2+s[i];   
                 t2:=1;   
                 break;   
              end;   
              if s[i]=')' then t:=t+1;   
              if s[i]='(' then t:=t-1;   
         end;   
     end;   
     p:=s;   
end;   
begin  
     assign(input,'express.in');   
     assign(output,'express.out');   
     reset(input);   
     rewrite(output);   
     readln(s);   
     s:=p(s);   
     for i:=1 to length(s) do  
         if s[i] in['0'..'9'] then begin  
            sz[i].size:=1;   
            sz[i].num:=ord(s[i])-48;   
         end  
         else begin  
              sz[i].size:=2;   
              sz[i].f:=s[i];   
         end;   
     n:=length(s);   
     for i:=1 to length(s)-1 do  
         write(s[i],' ');   
     writeln(s[length(s)]);   
     while n>1 do begin  
           for i:=1 to n do  
               if sz[i].size=2 then begin  
                  if sz[i].f='+' then begin  
                     sz[i-2].size:=1;   
                     sz[i-2].num:=sz[i-2].num+sz[i-1].num;   
                     for j:=i+1 to n do  
                         sz[j-2]:=sz[j];   
                     n:=n-2;   
                     break;   
                  end;   
                  if sz[i].f='-' then begin  
                     sz[i-2].size:=1;   
                     sz[i-2].num:=sz[i-2].num-sz[i-1].num;   
                     for j:=i+1 to n do  
                         sz[j-2]:=sz[j];   
                     n:=n-2;   
                     break;   
                  end;   
                  if sz[i].f='*' then begin  
                     sz[i-2].size:=1;   
                     sz[i-2].num:=sz[i-2].num*sz[i-1].num;   
                     for j:=i+1 to n do  
                         sz[j-2]:=sz[j];   
                     n:=n-2;   
                     break;   
                  end;   
                  if sz[i].f='/' then begin  
                     sz[i-2].size:=1;   
                     sz[i-2].num:=sz[i-2].num div sz[i-1].num;   
                     for j:=i+1 to n do  
                         sz[j-2]:=sz[j];   
                     n:=n-2;   
                     break;   
                  end;   
                  if sz[i].f='^' then begin  
                     temp:=sz[i-2].num;
                     if sz[i-1].num=0 then sz[i-2].num:=1;
                     for j:=1 to sz[i-1].num-1 do  
                         sz[i-2].num:=sz[i-2].num*temp;   
                     for j:=i+1 to n do  
                         sz[j-2]:=sz[j];   
                     n:=n-2;   
                     break;   
                  end;   
               end;   
           for i:=1 to n-1 do  
               if sz[i].size=1 then write(sz[i].num,' ') else write(sz[i].f,' ');   
           if sz[n].size=1 then writeln(sz[n].num,' ') else writeln(sz[n].f,' ');   
     end;   
     close(input);   
     close(output);   
end.