Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 2
1

Длинная арифметика разность

21.07.2020, 19:46. Показов 540. Ответов 1

Author24 — интернет-сервис помощи студентам
Код
Function Difference(s1,s2:string):integer; 
var
   a,length1,length2,i:integer;
   b:boolean;
begin
   a:=0;
   b:=true;
   length1:=length(s1);
   length2:=length(s2);
   if length1>length2 then begin a:= 1; b:=false; end;
   if length1<length2 then begin a:=-1; b:=false; end;
   if b then
   for i:=1 to length1 do 
    begin
      if Ord(s1[i])-48>Ord(s2[i])-48 then begin a:= 1; break; end;
      if s1[i]<s2[i] then begin a:=-1; break; end;
    end;
   Difference:=a;
end;

var
   s1,s2:string;
   i,length3,c,x:integer;
   N,M:array[1..1000] of integer;
begin
   readln(s1);
   readln(s2);
   while s1[1] = '0' do Delete(s1,1,1);
   while s2[1] = '0' do Delete(s2,1,1);
   if (s1 < s2) and (length(s1) <= length(s2)) then write('-');
   c:=0;
   length3:=length(s2);
   for i:=1 to length3 do
      M[length3-i+1]:=Ord(s2[i])-48;
   length3:=length(s1);
   
   for i:=1 to length3 do
      N[length3-i+1]:=Ord(s1[i])-48;
   if Difference(s1,s2)<0 then begin
      length3:=length(s2);
      for i:=1 to length3 do begin
         x:=N[i];
         N[i]:=M[i];
         M[i]:=x;
      end;
   end;
   for i:=1 to length3 do
    begin
      c:=c+N[i]-M[i]+10;
      N[i]:= c mod 10;                       
      if c < 10 then c:=-1 else c:=0;
    end;
   while (N[length3]=0) and (length3>1) do length3:=length3-1;
   for i:=length3 downto 1 do 
      Write(N[i]);
end.
Не ставится минус , когда считаю 2-15 , помогите пожалуйста решить эту проблему
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2020, 19:46
Ответы с готовыми решениями:

Длинная арифметика
Длинная арифметика, нужно сложить два числа. Где-то я что-то потерял, кажется с переносом остатка в...

Длинная арифметика
Организация представления длинного числа в виде: 1) байтового массива, 2) динамического списка,...

Длинная арифметика
Реализовать все задачи (задача 1 – задача 9) в виде программного модуля по работе с «длинными»...

Длинная арифметика
Необходимо написать программу по переводу числа длиной до 50-и символов из десятичной в двоичною...

1
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
22.07.2020, 06:42 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function inputNumber : String;
begin
  Result := ReadLnString;
  Result := Result.TrimStart('0');
  if (Result.Length = 0) or (Result.Count(c->Not Char.IsDigit(c)) > 0) then
    begin
      'Число состоит только из цифр и ≠ 0.'.Println;
      Halt;
    end;
end;
 
function Compare(a, b : String) : Integer;
begin
  Result := Sign(a.Length - b.Length);
  if Result = 0 then
    for var i := 1 to a.Length do
      begin
        Result := Sign(Ord(a[i]) - Ord(b[i]));
        if Result <> 0 then Exit;
      end;
end;
 
begin
  var s1 := inputNumber;
  var s2 := inputNumber;
  
  var sign := Compare(s1, s2);
  if sign = 0 then
    begin
      '0'.Println;
      Exit;
    end;
    
  if sign = -1 then
    Swap(s1, s2);
    
  s2 := '0'*(s1.Length - s2.Length) + s2;
  
  var d := False;
  for var i := s1.Length downto 1 do
    begin
      var n := Ord(s1[i]) - Ord(s2[i]);
      if d then n -= 1;
      d := n < 0;
      if d then n += 10;
      s1[i] := Chr(n + Ord('0'));
    end;
  
  s1 := (sign = -1 ? '-' : '') + s1.TrimStart('0');
  
  s1.Println;
end.
Добавлено через 1 минуту
Как смог разбил на более простые операции…
0
22.07.2020, 06:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2020, 06:42
Помогаю со студенческими работами здесь

Длинная целочисленная арифметика

Длинная арифметика: извлечение корня
Искала по форуму, не нашла ничего подходящего. Нужно полное решение задачи именно путём применения...

Длинная арифметика: вычислить 7 в 125 степени
задача с большими значениями данных вычислить 7 в 125 степени

Подпрограммы и Строки: длинная арифметика, умножение
Даны три строки символов a, b и c, состоящие только из цифр . Считая, что каждая строка...

Длинная арифметика. Ввод и вывод длинного числа и умножение длинного числа на короткое
Разработать процедуры или функции ввода и вывода длинного числа и умножение длинного числа на...

Длинная арифметика
Помогите пожалуйста, если не сложно)) Требуется найти сумму чисел в цикле от 10000 до 1000009,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru