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 вы можете прочитать здесь.
|