IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> вычитание через строки, длинная арифметика
сообщение
Сообщение #1


Гость






как реализовать вычитание из числа 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');


а дальше как ?помогите плз

Сообщение отредактировано: Dain -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Это не совсем "длинная арифметика", т.к. длина строки ограничена... Но делается вычитание в столбик вот так:

{ число представленное строкой 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.


 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Спасибо большое!
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.09.2020 20:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name