Мы будем реализовывать деление для сколь угодно больших целых чисел.
Это код-гольф .
Задача состоит в том, чтобы написать программу или функцию, которая реализует целые числа произвольной точности и деление на них.
Обратите внимание, что многие вещи, которые могут сделать это очень легко, запрещены, пожалуйста, не забудьте прочитать спецификацию .
вход
Вам дадут 2 вещи в качестве входных данных:
- Строка из 10 цифр, назовите это
n
. - еще одна строка из 10 цифр, назовите ее
m
Предположим, этоn>m>0
означает, что вас никогда не попросят делить на ноль .
Выход
Вы выведете два числа, Q
и R
где m * Q + R = n и 0 <= R <m
Характеристики
Ваше представление должно работать для сколь угодно больших целых чисел (ограничено доступной памятью).
Вы не можете использовать внешние библиотеки. Если вам нужна внешняя библиотека для ввода / вывода, вы можете рассматривать ее как встроенную. (глядя на такие вещи, как iostream и т. д.).
Если у вашего языка есть встроенная система, которая упрощает это, вы не можете ее использовать. Это включает (но не ограничивается ими) встроенные типы, которые могут обрабатывать произвольные целые числа точности.
Если по какой-либо причине в языке по умолчанию используются целые числа произвольной точности, эта функциональность не может использоваться для представления целых чисел, которые обычно не могут храниться в 64 битах.
Вход и выход ДОЛЖНЫ быть в базе 10 . Неважно, как вы храните числа в памяти или как вы выполняете арифметику с ними, но ввод / вывод будет основой 10.
У вас есть 15 секунд, чтобы вывести результат. Это должно запретить повторное вычитание.
Цель здесь - реализовать целые числа произвольной точности. Если по какой-то причине вы можете придерживаться спецификаций испытаний и успешно делать это без их реализации, я думаю, что это хорошо для вас, звучит правильно.
Тестовые случаи
- В этом случае входы 39! и 30!
вход
n = 20397882081197443358640281739902897356800000000
m = 265252859812191058636308480000000
Выход
Q = 76899763100160
R = 0
n
это сумма всех факториалов до 50, плюс 1.m
это объединенные числа до 20.
вход
n = 31035053229546199656252032972759319953190362094566672920420940313
m = 1234567891011121314151617181920
выход
q = 25138393324103249083146424239449429
r = 62459510197626865203087816633
n
это 205! + 200 !.m
Сколько слез заставил меня пролить Питер Тейлор, разрывая вещи, которые я выкладываю в песочнице.
вход
n = 271841734957981007420619769446411009306983931324177095509044302452019682761900886307931759877838550251114468516268739270368160832305944024022562873534438165159941045492295721222833276717171713647977188671055774220331117951120982666270758190446133158400369433755555593913760141099290463039666313245735358982466993720002701605636609796997120000000000000000000000000000000000000000000000000
m = 247
Выход
q = 1100573825740813795225181252819477770473619155158611722708681386445423816849801159141424129060075102231232666057768175183676764503262931271346408394876267875141461722640873365274628650676808557279259873162169126398101692109801549256156915750794061370041981513180387019893765753438422927286098434193260562682052606153857091520795991080960000000000000000000000000000000000000000000000000
r = 0;
Я, вероятно, добавлю больше тестов в какой-то момент.