как реализовать вычитание из числа a типа string чило b типа string
procedure sub( a,b:string; var c: string); var z,x,y,n,k,p,i,j: byte; Begin if a='0' then begin c:='0'; halt(0); end; c:=''; n:= length (a); k:= length (b); for i:=1 to n+k do c:=c+'0'; for i:=k downto 1 do begin p:=0; y:= ord (b[i])-ord('0'); for j:=n downto 1 do begin x:= ord(a[j])-ord('0');
а дальше как ?помогите плз
volvo
10.06.2007 16:07
Это не совсем "длинная арифметика", т.к. длина строки ограничена... Но делается вычитание в столбик вот так:
{ число представленное строкой A должно быть больше числа представленного B } function sub(a, b: string): string; var c: string; i, j, k: integer; begin while length(a) <> length(b) do b := '0' + b;
c := ''; for i := length(a) downto 1 do begin if a[i] >= b[i] then c := chr(ord(a[i]) - ord(b[i]) + ord('0')) + c else begin j := i; repeat dec(j); until a[j] > '0'; a[j] := chr(ord(a[j]) - 1); for k := j + 1 to i - 1 do a[k] := '9'; c := chr(ord(a[i]) + 10 - ord(b[i]) + ord('0')) + c; end; end; sub := c; end;
Для того, чтобы вычитать большее из меньшего и получать правильный отрицательный результат, можно, например, делать так:
function sub_s(a, b: string): string; begin if (length(a) < length(b)) or ((length(a) = length(b)) and (a < b)) then sub_s := '-' + sub(b, a) else sub_s := sub(a, b); end;
begin
writeln(sub_s('745', '10003')); end.
Dain
10.06.2007 16:17
Спасибо большое!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.