Помощь - Поиск - Пользователи - Календарь
Полная версия: вычитание через строки
Форум «Всё о Паскале» > 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
Спасибо большое!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.