//前言:我发现,最近写的题都有各种高精度,所以说,把写过的贴在这里,有空也可以看一看。
一。高精a+b据说会RE,搞不好是201
没啥好讲,细心有耐心就好了。
var
s:string;
x,y:array[0..120]of integer;
i,j,l1,l2:integer;
begin
readln(s);
l1:=length(s);
for i:=l1 downto 1 do
x[l1-i]:=ord(s[i])-48;
readln(s);
l2:=length(s);
for i:=l2 downto 1 do
y[l2-i]:=ord(s[i])-48;
if l1<l2 then l1:=l2;
for i:=0 to l1 do
begin
x[i]:=x[i]+y[i];
x[i+1]:=x[i+1]+x[i] div 10;
x[i]:=x[i] mod 10;
end;
j:=120;
while x[j]=0 do dec(j);
for i:=j downto 0 do write(x[i]);
end.
二。高精a*b
保证AC的!
还是细心有耐心,毕竟到现在肯定知道原理的。
var
s1,s2:ansistring;
a,b,c:array[1..5000] of integer;
l1,l2,l,i,j,k,x:integer;
begin
readln(s1);
readln(s2);
l1:=length(s1);
l2:=length(s2);
l:=l1+l2;
for i:=1 to l1 do
a[l1-i+1]:=ord(s1[i])-48;
for i:=1 to l2 do
b[l2-i+1]:=ord(s2[i])-48;
for i:=1 to l1 do
begin
x:=0;
for j:=1 to l2 do
begin
c[i+j-1]:=c[i+j-1]+x+a[i]*b[j];
x:=c[i+j-1] div 10;
c[i+j-1]:=c[i+j-1]mod 10;
end;
c[i+j]:=x;
end;
while (c[l]=0)and(l>1) do dec(l);
for i:=l downto 1 do write(c[i]);
writeln;
end.