2007-08-22
高精度减法 - [Algorithms]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://conoon.blogbus.com/logs/7858328.html
{说明:用字符串来存放减数和被减数,最大限制255位减255位}
program jjzx; {本程序没有考虑两负数相减}
var s,s1,s2:string;
a,b,c:array[1..260] of integer;
i,l,m,k1,k2:integer;
d:char; {D用来表示正负号}
begin
writeln('input s1:');readln(s1);
writeln('input s2:');readln(s2);
l:=length(s1); m:=length(s2);
if l begin
s:=s1; s1:=s2; s2:=s; d:='-'
end;
if l=m then {如果长度一样则直接比较,S1小就要与S2调换}
if s1 begin
s:=s1;s1:=s2;s2:=s;d:='-'
end;
l:=length(s1); m:=length(s2); {为什么要再次得到长度}
k1:=261; {为什么是261}
for i:=l downto 1 do {S1转换过程}
begin
k1:=k1-1;
a[k1]:=ord(s1[i])-48
end;
k2:=261;
for i:=m downto 1 do {S2转换过程}
begin
k2:=k2-1;
b[k2]:=ord(s2[i])-48
end;
for i:=260 downto k1 do {开始计算}
if a[i] begin
c[i]:=a[i]+10-b[i];
a[i-1]:=a[i-1]-1 {为什么下标是I-1}
end
else
c[i]:=a[i]-b[i];
writeln('jie guo shi :');
write(d:2); {首先输出符号位}
for i:=k1 to 260 do write(c[i]);
writeln
end.
随机文章:
收藏到:Del.icio.us





