как реализовать вычитание из числа a типа string чило b типа string
procedure sub( a,b:string; var c: string);
var
z,x,y,n,k,p,i,j: byte;
Beginif a='0'thenbegin c:='0'; halt(0); end;
c:='';
n:= length (a);
k:= length (b);
for i:=1to n+k do c:=c+'0';
for i:=k downto1dobegin
p:=0; y:= ord (b[i])-ord('0');
for j:=n downto1dobegin
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;
beginwhile length(a) <> length(b) do
b := '0' + b;
c := '';
for i := length(a) downto1dobeginif a[i] >= b[i] then c := chr(ord(a[i]) - ord(b[i]) + ord('0')) + c
elsebegin
j := i;
repeat
dec(j);
until a[j] > '0';
a[j] := chr(ord(a[j]) - 1);
for k := j + 1to i - 1do 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;
beginif (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
Спасибо большое!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.