Олимпиады по информатике (ХМАО - Югра)

   
 
Югорский НИИ ИТ, Югорский ФМЛ
Логин:   Пароль:    
 
   
 
Новости
О проекте
Регистрация
Гостевая книга
Форум
Архив задач
Состояние системы
Олимпиады
Работа в системе
Рейтинг
Новичкам
Методическое пособие
Дистанционное обучение
Дистрибутивы
Ссылки

HotLog

A-B

(Время: 1 сек. Память: 16 Мб Сложность: 44%)

При вычетании длинных чисел удобно вычитать из наибольшего наименьшее, поэтому предварительно нужно их сравнить и в случае необходимости поменять местами. Так как A-B=-(B-A), то в случае когда A < B можно вывести знак "-", а затем положительное значение (B-A). При вычитании будем выполнять поразрядное вычитание с использованием переменной c для хранения значения переноса. Результат операции можно сохранять в массиве a, т.к. ранее используемые разряды фактически не имеют значения для дальнейшего процесса вычисления.

Опишем решение данной задачи в виде следующего алгоритма:

  const maxsize=1001;
  int a[maxsize], b[maxsize];

  readlong(a);
  readlong(b);

  if(complong(a,b) < 0){
    write('-');
    a <--> b;
  }

  c=0;
  for i=1..a[0]{
    c = c+a[i]-b[i]+10;
    a[i] = c mod 10;
    if(c < 10) c=-1; else c=0;
  }
  while(a[a[0]]=0 and a[0]>1) a[0]=a[0]-1;

  writelong(a);

Информацию о представлении длинных чисел и реализации функций readlong, writelong и complong вы можете прочитать здесь.


[Все попытки] [Задача]


 
     
Югорский НИИ ИТ, Югорский ФМЛ