Implementaremos divisão para números inteiros arbitrariamente grandes.
Isso é código-golfe .
A tarefa é escrever um programa ou função que implemente números inteiros de precisão arbitrários e divisão neles.
Observe que muitas coisas que podem facilitar muito isso não são permitidas; leia as especificações .
Entrada
Você receberá duas coisas como entrada:
- uma sequência de 10 dígitos base, chame-a
n
. - outra sequência de 10 dígitos base, chame-a
m
Suponha quen>m>0
significa que você nunca será solicitado a dividir por zero .
Resultado
Está output dois números, Q
e R
onde m * Q + R = n e 0 <= R <m
Especificações
Seu envio deve funcionar para números inteiros arbitrariamente grandes (limitados pela memória disponível).
Você não pode usar bibliotecas externas. Se você precisar de uma biblioteca externa para E / S, poderá tratá-la como um built-in. (olhando para coisas como iostream, etc).
Se seu idioma possui um built-in que trivializa isso, você não pode usá-lo. Isso inclui (mas não pode ser limitado a) tipos internos que podem manipular números inteiros de precisão arbitrários.
Se, por algum motivo, um idioma usar números inteiros de precisão arbitrários por padrão, essa funcionalidade não poderá ser usada para representar números inteiros que normalmente não poderiam ser armazenados em 64 bits.
Entrada e saída DEVE estar na base 10 . Não importa como você armazena os números na memória ou como executa aritmética neles, mas a E / S será a base 10.
Você tem 15 segundos para produzir um resultado. Isso é para proibir a subtração iterada.
O objetivo aqui é realmente implementar números inteiros de precisão arbitrários. Se, por algum motivo, você conseguir aderir às especificações do desafio e fazê-lo com êxito sem implementá-las, acho que é bom para você, parece válido.
Casos de teste
- Nesse caso, as entradas são 39! e 30!
Entrada
n = 20397882081197443358640281739902897356800000000
m = 265252859812191058636308480000000
Resultado
Q = 76899763100160
R = 0
n
é a soma de todos os fatoriais até 50, mais 1.m
são números concatenados até 20.
entrada
n = 31035053229546199656252032972759319953190362094566672920420940313
m = 1234567891011121314151617181920
resultado
q = 25138393324103249083146424239449429
r = 62459510197626865203087816633
n
é 205! + 200 !.m
é quantas lágrimas PeterTaylor me fez derramar rasgando as coisas que coloco na caixa de areia.
Entrada
n = 271841734957981007420619769446411009306983931324177095509044302452019682761900886307931759877838550251114468516268739270368160832305944024022562873534438165159941045492295721222833276717171713647977188671055774220331117951120982666270758190446133158400369433755555593913760141099290463039666313245735358982466993720002701605636609796997120000000000000000000000000000000000000000000000000
m = 247
Resultado
q = 1100573825740813795225181252819477770473619155158611722708681386445423816849801159141424129060075102231232666057768175183676764503262931271346408394876267875141461722640873365274628650676808557279259873162169126398101692109801549256156915750794061370041981513180387019893765753438422927286098434193260562682052606153857091520795991080960000000000000000000000000000000000000000000000000
r = 0;
Provavelmente adicionarei mais casos de teste em algum momento.