洛谷2142 高精度减法
本题地址: http://www.luogu.org/problem/show?pid=2142
题目描述
高精度减法
输入输出格式
输入格式:
两个数(第二个可能比第一个大)
输出格式:
结果(是负数要输出负号)
输入输出样例
输入样例#1:
2
1
输出样例#1:
1
说明
无
题解
高精度
高精度减法须按照如下步骤进行。
1.输入和存储。
2.计算结果的位数和正负:位数不会超过两数中较大的一个,判断结果的正负可以根据被减数和减数的大小进行判断。
3.计算与错位处理。
4.处理结果的位数并输出结果。因为程序开始将结果的位数初始化为较大数的位数,实际中结果的位数可能达不到,因此要算出结果的实际位数。
下面附上代码。
代码
var i,l1,l2:longint; a,b,c:
array [1..502] of longint; ch:
array [1..502] of char; fan:
boolean; begin repeat inc(l1); read(ch[l1]);
until eoln; for i:=1 to l1 do a[i]:=ord(ch[l1-i+1])-48; readln;
repeat inc(l2); read(ch[l2]);
until eoln; for i:=1 to l2 do b[i]:=ord(ch[l2-i+1])-48; if (l1<l2) or (l1=l2) and (a[1]<b[1]) then begin fan:=
true; for i:=1 to l1 do c[i]:=a[i]; for i:=1 to l2 do a[i]:=b[i]; fillchar(b,sizeof(b),
0); for i:=1 to l1 do b[i]:=c[i]; l1:=l2;
end; for i:=1 to l1 do begin c[i]:=a[i]-b[i];
if (c[i]<0) and (i<l1) then begin dec(a[i+
1]); inc(c[i],
10); end; end; while c[l1]=0 do dec(l1); if l1<=0 then begin writeln(0); halt;
end; if fan then write('-'); for i:=l1 downto 1 do write(c[i]); end.
(本文系笔者原创,未经允许不得转载)
转载于:https://www.cnblogs.com/yzm10/p/4753324.html
相关资源:高精度减法(C++)