娄山中学noip吧 关注:137贴子:1,769
  • 2回复贴,共1

expr参考代码

只看楼主收藏回复

var c:char;
res,temp,op:int64;
begin
assign(input,*expr10.in*);
assign(output,*expr10.out*);
reset(input);
rewrite(output);
read(c);
res:=0;temp:=1;
op:=0;
while ((c>=*0*)and(c<=*9*))or(c=*+*)or(c=***)
do begin
if c in[*0*..*9*] then op:=(op*10+ord(c)-ord(*0*))mod 10000;
if (c=*+*) then begin
temp:=(temp*op)mod 10000;
res:=(res+temp)mod 10000;
op:=0;
temp:=1;
end;
if (c=***) then begin
temp:=(temp*op)mod 10000;
op:=0;
end;
read(c);
end;
temp:=(temp*op)mod 10000;
res:=(res+temp)mod 10000;
writeln(res);
close(input);
close(output);
end.


1楼2014-08-14 14:11回复
    var
    i,k,j:longint;
    flag:boolean;
    c:char;
    tot,temp:qword;
    a:array[0..100000] of longint;
    procedure add;
    begin
    inc(i);
    a[i]:=temp;
    temp:=0;
    end;
    procedure jisuan;
    begin
    if flag then begin
    a[i-1]:=(a[i-1]*a[i]) mod 10000;
    dec(i);
    end;
    end;
    begin
    assign(input,*expr10.in*);reset(input);
    assign(output,*expr10.out*);rewrite(output);
    while not eoln do begin
    read(c);
    case c of
    *+*:begin
    add;
    jisuan;
    flag:=false;
    end;
    ***:begin
    add;
    jisuan;
    flag:=true;
    end;
    else begin
    val(c,k);
    temp:=(temp*10+k) mod 10000;
    end
    end;
    end;
    inc(i);
    a[i]:=temp;
    tot:=0;
    if flag then begin
    inc(tot,a[i]*a[i-1] mod 10000);
    i:=i-2;
    end;
    while i>0 do begin
    inc(tot,a[i]);
    tot:=tot mod 10000;
    dec(i);
    end;
    writeln(tot);
    close(input);close(output);
    end.


    IP属地:上海2楼2014-08-14 14:13
    回复
      不要光抄下来啊,程序不是复制粘贴这么简单的,话说我自己也找到错误的地方了。虽然在这道题里问题不大。


      3楼2014-08-14 23:57
      回复