|
{说明:用字符串来存放减数和被减数,最大限制255位减255位}
{优化在于用一个数组元素存放4位数,节省存储空间}
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; repeat {转换S1,一个数组元素用来存放4位数字} k1:=k1-1; s:=copy(s1,l-3,4); val(s,a[k1],i); s1:=copy(s1,1,l-4); l:=l-4 until l<=0; k2:=261; {转换S2} repeat k2:=k2-1; s:=copy(s2,m-3,4); val(s,b[k2],i); s2:=copy(s2,1,m-4); m:=m-4 until m<=0;
for i:=260 downto k1 do if a[i] begin c[i]:=a[i]+10000-b[i]; {注意是加上10000} a[i-1]:=a[i-1]-1; end else c[i]:=a[i]-b[i]; writeln('jie guo shi :'); write(d:2); {首先输出符号位} write(c[k1]); {在输出最高位,因为最高位不用补0} for i:=k1+1 to 260 do {注意补0的方法} begin if c[i]<1000 then write('0'); if c[i]<100 then write('0'); if c[i]<10 then write('0'); write(c[i]); end; writeln end. |