Implementaremos división para enteros arbitrariamente grandes.
Este es el código de golf .
La tarea es escribir un programa o función que implemente números enteros de precisión arbitraria y División en ellos.
Tenga en cuenta que muchas cosas que podrían hacer que esto sea muy fácil no están permitidas, asegúrese de leer las especificaciones .
Entrada
Se le darán 2 cosas como entrada:
- una cadena de base 10 dígitos, llámalo
n
. - otra cadena de 10 dígitos base, llámalo
m
Suponga quen>m>0
significa que nunca se le pedirá que divida por cero .
Salida
Se quiere salida dos números, Q
y R
donde m * Q + R = n y 0 <= R <m
Especificaciones
Su envío debería funcionar para enteros arbitrariamente grandes (limitado por la memoria disponible).
No puede usar bibliotecas externas. Si necesita una biblioteca externa para E / S, puede tratarla como una función incorporada. (mirando cosas como iostream, etc.).
Si su idioma tiene una función incorporada que lo trivializa, no puede usarlo. Esto incluye (pero no se limita a) los tipos integrados que pueden manejar enteros de precisión arbitrarios.
Si, por algún motivo, un idioma usa enteros de precisión arbitraria de forma predeterminada, esta funcionalidad no se puede usar para representar enteros que normalmente no podrían almacenarse en 64 bits.
La entrada y la salida DEBEN estar en la base 10 . No importa cómo almacene los números en la memoria o cómo realice la aritmética en ellos, pero la E / S será la base 10.
Tienes 15 segundos para generar un resultado. Esto es para prohibir la resta iterada.
El objetivo aquí es implementar realmente enteros de precisión arbitrarios. Si por alguna razón puedes cumplir con las especificaciones del desafío y hacerlo con éxito sin implementarlas, bueno, supongo que es bueno para ti, parece válido.
Casos de prueba
- En este caso, las entradas son 39! y 30!
Entrada
n = 20397882081197443358640281739902897356800000000
m = 265252859812191058636308480000000
Salida
Q = 76899763100160
R = 0
n
es la suma de todos los factoriales hasta 50, más 1.m
son números concatenados hasta 20.
entrada
n = 31035053229546199656252032972759319953190362094566672920420940313
m = 1234567891011121314151617181920
salida
q = 25138393324103249083146424239449429
r = 62459510197626865203087816633
n
es 205! + 200 !.m
es cuántas lágrimas PeterTaylor me ha hecho derramar al destrozar cosas que publico en la caja de arena.
Entrada
n = 271841734957981007420619769446411009306983931324177095509044302452019682761900886307931759877838550251114468516268739270368160832305944024022562873534438165159941045492295721222833276717171713647977188671055774220331117951120982666270758190446133158400369433755555593913760141099290463039666313245735358982466993720002701605636609796997120000000000000000000000000000000000000000000000000
m = 247
Salida
q = 1100573825740813795225181252819477770473619155158611722708681386445423816849801159141424129060075102231232666057768175183676764503262931271346408394876267875141461722640873365274628650676808557279259873162169126398101692109801549256156915750794061370041981513180387019893765753438422927286098434193260562682052606153857091520795991080960000000000000000000000000000000000000000000000000
r = 0;
Probablemente agregaré más casos de prueba en algún momento.