Gravatar
金牌教师王艳芳
积分:151
提交:62 / 372
$ 举个例子,假如你现在遇到的string-b中的元素分别为 1,2,3,4,*,1,2,3,4;$
在第一层循环时 $ a[1] = b[j] $
在下一次时 $ a[i] *= 10 $ $ a[i]+=b[j] $
此时 $ j=1 $
$ a[i]=1*10+2=12 $

同时第三次时
此时 $ j=2 $
$ a[i]=12*10+3=123 $

同时第四次
此时 $ j=3 $
$ a[i]=123*10+4=1234 $

注意,后面我们遇到的符号 ,所以我们将保存数据到一个全新的 $ 数组- c $ 中,其中 $ jsq $ 在判断到遇到符号所以jsq在存储完后加上2(一个存上一个数字,一个存这次的符号)
此时 $ jsq=2 $
$ c[1]=1234 c[2]=* $

Gravatar
金牌教师王艳芳
积分:151
提交:62 / 372
可以不开longlong,我的话是用了一个string,然后先分离,在分离数字时可以搞一个int变量,在遇到数字时直接加上,下一次先乘以10再直接加上就好了,当然这些是扫到数字的时候的时候执行的,当遇到符号的时候就直接让那个int定量加一下,例如刚开始是a[i],扫到符号后下一次遇到数字就存到a[i+1]

Gravatar
ムラサメ
积分:1497
提交:377 / 744
数据太水,虽然我用的long long但实际用int也能过

Gravatar
kZime
积分:1101
提交:334 / 677
错了好久。。。

Gravatar
joel
积分:867
提交:313 / 558

Gravatar
Rapiz
积分:1624
提交:386 / 700
字符串长不止1e6

Gravatar
sxysxy
积分:2485
提交:603 / 1120
被标题吸引进来本来想写个递归下降分析然后.....看见只有+ *运算就直接暴力了...(stl大法好

Gravatar
菜徐坤
积分:132
提交:81 / 283
有问题啊
各路神犇祝我一臂之力
var
s:char;
lc:boolean;
temp,i,cj,ja,he:integer;
begin
assign(input,'expr.in');
reset(input);
{assign(output,'expr.out');
rewrite(output); }
cj:=1;
while not eof do
begin
read(s);
if (s>='0') and (s<='9') then
temp:=(temp*10+(ord(s)-ord('0')))mod 10000
else
begin
if s='*' then
begin
cj:=cj*temp;
lc:=false;
end
else
begin
if lc=true then begin
ja:=ja+cj*temp;
lc:=false;
cj:=1;
end
else
ja:=ja+temp;
end;
temp:=0;
end;
end;
if lc=true then begin
ja:=ja+cj*temp;
lc:=false;
cj:=1;
end
else
ja:=ja+temp;
writeln(50);
close(input);
close(output);
end.

Gravatar
孤独的根号5
积分:1
提交:1 / 10
=

Gravatar
乙阙溟河
积分:15
提交:8 / 9
传说中的龅牙,啊呀呀。

Gravatar
喵了个咪的
积分:47
提交:26 / 31
从这个角度,刚好可以扒下来楼上的龅牙。{我是那么的英明神武}