题目大意:
在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵。他决定去收集人间的春度,聚集起来让西行妖开花。很快,作为幽幽子家园艺师的魂魄妖梦收集到了M个单位的春度。并且在这段时间里,幽幽子计算出要让西行妖开出一朵花需要N个单位的春度。现在幽幽子想要知道,使用所有的春度,能够让西行妖开出多少朵花。
N,M的位数不超过L
对于60%的数据:L <= 2,000且ans <= 2,000
对于100%的数据:L <= 20,000且ans <= 2,000,000,000
题解:
显然裸的高精度除法
不会高精度除法的我给个
传送门
代码:
const
n=30001;
type
arr=array [0..n] of longint;
var
a,b,c:arr;
st1,st2:ansistring;
l1,l2,i,j:longint;
procedure work;
var
i,j,k,g,s:longint;
begin
j:=1;
i:=1;
while (i<n) and (a[i]=b[i]) do inc(i);
while a[i]>=b[i] do
begin
inc(j);
for i:=2 to n do
begin
b[i-1]:=b[i];
b[i]:=0;
end;
i:=1;
while (i<n) and (a[i]=b[i]) do inc(i);
end;
while j>0 do
begin
i:=1;
while (i<n) and (a[i]=b[i]) do inc(i);
while a[i]>=b[i] do
begin
k:=n-j+1;
g:=0;
s:=0;
c[k]:=c[k]+1;
for i:=k downto 1 do
begin
s:=c[i]+g;
g:=s div 10;
c[i]:=s mod 10;
end;
g:=0;
for i:=n downto 1 do
if a[i]>=b[i]+g
then begin
a[i]:=a[i]-b[i]-g;
g:=0;
end
else begin
a[i]:=10+a[i]-b[i]-g;
g:=1;
end;
i:=1;
while (i<n) and (a[i]=b[i]) do inc(i);
end;
j:=j-1;
for i:=n downto 2 do
begin
b[i]:=b[i-1];
b[i-1]:=0;
end;
end;
end;
begin
readln(st1);
readln(st2);
l1:=length(st1);
l2:=length(st2);
for i:=1 to l1 do
a[n-l1+i]:=ord(st1[i])-48;
for i:=1 to l2 do
b[n-l2+i]:=ord(st2[i])-48;
work;
j:=1;
while (j<n) and (c[j]=0) do inc(j);
for i:=j to n do write(c[i]);
end.