Teorema da divisão Euclidiana

Boa tarde galera, beleza?

Preciso retornar 3 resultados em um exercicio sobre algoritmo euclidiano. O código é o seguinte:

let array = gets().split(' ')
let a = parseInt(array[0])
let b = parseInt(array[1])
let r = a % b;
let q = (a - r) / b;
console.log(q + " " + r);

Os numeros já vem preenchido por padrão, estou usando uma plataforma que ja insere os valores, fazendo as entradas(As entradas são recebidas em let array = gets().split(' ') ).
Os valores de entrada são:

1ª Entrada: 7 3 Saída: 2 1

2ª Entrada: 7 -3 Saída: -2 1

3ª Entrada: -7 -3 Saída: 2 1

Meu código passa no teste das 2 primeiras entradas, mas não no teste da terceira.

Pra vocês entenderem a fundo, vou colocar abaixo o enunciado do exercício inteiro.

## Desafio

Você recebeu desafio de desenvolver um programa que calcule o quociente e o resto da divisão de dois números inteiros. Não se esqueça que o quociente e o resto da divisão de um inteiro a por um inteiro não-nulo b são respectivamente os únicos inteiros q e r tais que:

0 ≤ r < | b |

Se r < 0: r = r - | b |

a = b × q + r

q = ( a - r ) / b

Caso você não saiba, o teorema que garante a existência e a unicidade dos inteiros q e r é conhecido como ‘Teorema da Divisão Euclidiana’ ou ‘Algoritmo da Divisão’.

** | b | (Módulo / Valor absoluto): É o valor representado de forma positiva;

## Entrada

A entrada é composta por dois números inteiros a e b (-1.000 ≤ a , b < 1.000).

## Saída

Imprima o quociente q seguido pelo resto r da divisão de a por b , considerando as regras apresentadas a cima.

1 curtida

cheguei no mesmo ponto mas nao faz sentido o resto até tentei aplicar a formula matematica quando o resto fosse menor que zero mas nao acontece

Deves sempre ter um resto maior ou igual que zero, pelo que a % b não é suficiente para encontrares o valor de r, precisas desta parte Se r < 0: r = r-|b|

Se 0 ≤ r < | b |, entende-se que r deve ser um valor positivo, e se quando r < 0: r = r - | b |, não faz sentindo pois todo novo r obtido será negativo. Exemplo: r = -1 e b = -3, teremos r = -1 - 3 = -4, com um r negativo novamente, teríamos que repetir: r = - 4 - 3 = - 7… loop infinito.
Quando r < 0, experimente fazer r = r + | b |.

Certo

0 <= resto < |b|
Portanto o resto não pode ser negativo.
Caso seja, some-o ao absoluto de b.
exemplo: r + |b|, onde r = -1 e |b| = 3, o resto vai ser 2.
Assim a sua solução tem que ter o seguinte if depois do resto:
let r = (a % b);
if (r < 0) { r += Math.abs(b); }
let q = (a - r) / b;