但是..............怎么全部输出有效数字?
我用while做乘法原理输出的测试数据是:
0.0247500000000000008881784197
(= =|||
why?why?WHY?!!!
但是直接输出又是对的..
直接输出:2.475000000000000E-002
code:word;
b,c,sz:array[0..1000] of longint;
jl,s,tmp:string;
a:array[1..4] of string[10];
sum,n,i,j,q,k,js:longint;
procedure main;
begin
readln(n);
sz[1]:=1;
sz[0]:=1;
readln(s);
for i:=1 to n do
begin
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
readln(tmp);
for j:=1 to 3 do
begin
k:=pos( ,tmp);
a[j]:=copy(tmp,1,k-2);
delete(tmp,1,k);
end;
K:=pos(%,tmp);
a[4]:=copy(tmp,1,k-1);
if s[i]=A then sum:=1
else if s[i]=B then sum:=2
else if s[i]=C then sum:=3
else if s[i]=D then sum:=4;
js:=0;
for j:=length(a[sum]) downto 1 do
begin
js:=js+1;
val(copy(a[sum],j,1),b[js],code);
end;
for q:=1 to sz[0] do
for j:=1 to length(a[sum]) do
begin
c[q+j-1]:=c[q+j-1]+sz[q]*b[j];
c[q+j]:=c[q+j]+c[q+j-1] div 10;
c[q+j-1]:=c[q+j-1] mod 10;
end;
if c[sz[0]+length(a[sum])]<>0 then sz[0]:=sz[0]+length(a[sum]) else sz[0]:=sz[0]+length(a[sum])-1;
for j:=1 to sz[0] do sz[j]:=c[j];
end;
js:=0;
jl:=;
s:=;
end;
begin
main;
for i:=sz[0] downto 1 do begin str(sz[i],jl);s:=s+jl;end;
js:=n shl 1;
if js=length(s) then s:=0.+s
else if js>length(s) then
begin
sum:=0;
repeat
inc(sum);if sum>length(s) then s:=0+s;
if sum=js then begin s:=0.+s;break;end;
until 1+1=3;
while true do
begin
if (s[length(s)]=0)then delete(s,length(s),1) else
if s[length(s)]=. then begin delete(s,length(s),1);break;end
else break;
end;
end
else
begin
sum:=0;
for i:=length(s) downto 1 do
begin
sum:=sum+1;
if sum=js then begin insert(.,s,i);break;end;
end;
while true do
begin
if (s[length(s)]=0)then delete(s,length(s),1) else
if s[length(s)]=. then begin delete(s,length(s),1);break;end
else break;
end;
end;
write(s);
end.
这个算法..看得懂都不容易
code:word;
b,c,sz:array[0..1000] of longint;
jl,s,tmp:string;
a:array[1..4] of string[10];
sum,n,i,j,q,k,js:longint;
procedure main;
begin
readln(n);
sz[1]:=1;
sz[0]:=1;
readln(s);
for i:=1 to n do
begin
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
readln(tmp);
for j:=1 to 3 do
begin
k:=pos( ,tmp);
a[j]:=copy(tmp,1,k-2);
delete(tmp,1,k);
end;
K:=pos(%,tmp);
a[4]:=copy(tmp,1,k-1);
if s[i]=A then sum:=1
else if s[i]=B then sum:=2
else if s[i]=C then sum:=3
else if s[i]=D then sum:=4;
js:=0;
for j:=length(a[sum]) downto 1 do
begin
js:=js+1;
val(copy(a[sum],j,1),b[js],code);
end;
for q:=1 to sz[0] do
for j:=1 to length(a[sum]) do
begin
c[q+j-1]:=c[q+j-1]+sz[q]*b[j];
c[q+j]:=c[q+j]+c[q+j-1] div 10;
c[q+j-1]:=c[q+j-1] mod 10;
end;
if c[sz[0]+length(a[sum])]<>0 then sz[0]:=sz[0]+length(a[sum]) else sz[0]:=sz[0]+length(a[sum])-1;
for j:=1 to sz[0] do sz[j]:=c[j];
end;
js:=0;
jl:=;
s:=;
end;
begin
main;
for i:=sz[0] downto 1 do begin str(sz[i],jl);s:=s+jl;end;
js:=n shl 1;
if js=length(s) then s:=0.+s
else if js>length(s) then
begin
sum:=0;
repeat
inc(sum);if sum>length(s) then s:=0+s;
if sum=js then begin s:=0.+s;break;end;
until 1+1=3;
while true do
begin
if (s[length(s)]=0)then delete(s,length(s),1) else
if s[length(s)]=. then begin delete(s,length(s),1);break;end
else break;
end;
end
else
begin
sum:=0;
for i:=length(s) downto 1 do
begin
sum:=sum+1;
if sum=js then begin insert(.,s,i);break;end;
end;
while true do
begin
if (s[length(s)]=0)then delete(s,length(s),1) else
if s[length(s)]=. then begin delete(s,length(s),1);break;end
else break;
end;
end;
write(s);
end.
这个算法..看得懂都不容易