Помощь - Поиск - Пользователи - Календарь
Полная версия: вычитание через строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dain
как реализовать вычитание из числа 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
Это не совсем "длинная арифметика", т.к. длина строки ограничена... Но делается вычитание в столбик вот так:

{ число представленное строкой 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
Спасибо большое!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.