2132 - [数值问题]高精度减法
【问题描述】
输入两个高精度正整数a和b(a,b的位数<=200),求a-b的差
【输入格式】
<span>输入共两行,分别为a和b</span>
<span>【输出格式】</span>
<span>输出共一行,表示两个数的差,若a小于b,则先输出负号。</span>
<span>【输入样例1】 </span><span><br />
9999999999999999999999999999999999
<span style="font-family:'Microsoft Yahei';font-size:14px;line-height:21px;background-color:#F5F5F5;">1111111111111111111111111111111111</span>
<span>【输出样例1】</span>
8888888888888888888888888888888888
题目输入
题目输出
输入/输出样例
输入格式
输出格式
提示
Const
SIZE = 200;
Type
hugeint = Record
len : Integer;
num : Array[1..SIZE] Of Integer;
End;
var a,b:hugeint;
s1,s2:string;
i:integer;
Function over(a, b : hugeint) : integer;
Var
i : Integer;
Begin
If (a.len>b.len) Then
Begin
over :=1 ;
Exit;
End;
If a.len < b.len Then
Begin
over := 2;
Exit;
End;
For i := a.len DownTo 1 Do
Begin
If a.num[i] > b.num[i] Then
Begin
over := 1;
Exit;
End;
If a.num[i] < b.num[i] Then
Begin
over := 2;
Exit;
End;
End;
over := 3;
End;
procedure minus(a,b:hugeint);
var
i:longint;
t,ans:hugeint;
begin
fillchar(ans.num,sizeof(ans.num),0);
if over(a,b)=2 then
begin
write('-');
t:=a;a:=b;b:=t;
end;
if over(a,b)=3 then begin writeln(0);exit;end;
ans.len:=a.len;
for i:=1 to ans.len do ans.num[i]:=a.num[i]-b.num[i];
for i:=1 to ans.len do
if ans.num[i]<0 then
begin
dec(ans.num[i+1]);
inc(ans.num[i],10);
end;
while (ans.len>1)and(ans.num
[ans.len]=0) do dec(ans.len);
for i:=ans.len downto 1 do write(ans.num[i]);
writeln;
end;
procedure datain;
begin
assign(input,'highminus.in'); assign(output,'highminus.out');
reset(input); rewrite(output);
readln(s1);
readln(s2);
a.len:=length(s1);
b.len:=length(s2);
for i:=1 to a.len do a.num[i]:=ord(s1[a.len-i+1])-ord('0');
for i:=1 to b.len do b.num[i]:=ord(s2[b.len-i+1])-ord('0');
end;
begin
datain;
minus(a,b);
close(input);close(output);
end.
<br />
<br />