Implemente uma função divide(int a, int b, int c)
que imprima o valor base 10 de a/b
. sem usar nenhuma matemática de ponto flutuante nem BigInteger
/ BigDecimal
ou bibliotecas equivalentes. Pelo menos c
caracteres precisos dentro do conjunto de 0123456789.
devem ser impressos, exceto a (possível) exceção no ponto 4 abaixo.
a
eb
pode ser qualquer número inteiro de 32 bits. Atualização: se, para fins de golfe, você gostaria que as entradas fossem primitivas de 64 bits, tudo bem, mas você não precisa oferecer suporte a todo o intervalo de dados de 64 bits.- Você não precisa verificar se
c
é positivo (embora, esperançosamente, seu programa não trava), se não for. - O limite superior mínimo suportado para
c
é500
. Tudo bem se o seu programa não oferecer suporte aos valoresc
acima500
, mas também estará bem se houver. - Para números que se dividem igualmente, é sua escolha imprimir zeros extras (com base no valor de
c
) ou nada. - Você não precisa usar a função para executar outras tarefas com o quociente, o único objetivo é imprimir.
- Para números entre
-1
e1
, é sua escolha imprimir um líder0
. No entanto, esse é o único cenário em que a impressão de um zero à esquerda é aceitável e você pode imprimir apenas um desses zero. - Você pode usar qualquer lógica de arredondamento / piso / teto que você preferir para a última casa decimal.
- Para uma resposta negativa, você deve imprimir um líder
-
. Isso não conta parac
. No entanto, é sua escolha se você deseja imprimir,
+
ou nada para uma resposta positiva. - Divisão inteira e módulo inteiro são permitidos. No entanto, lembre-se de que você está restrito a primitivos, a menos que opte por implementar sua própria
BigInteger
/BigDecimal
biblioteca, que conta com o tamanho do código. - Você não precisa lidar com o
b
ser0
, mas pode, se quiser. Seu programa pode inserir um loop infinito, ou travar, seb=0
, e você não será penalizado. - Ligeira alteração de regra por comentário. Para garantir que o campo de jogo esteja nivelado
a
e comb
garantia de números inteiros de 32 bits, você pode usar números inteiros de 64 bits. Se o idioma escolhido exceder os números inteiros de 64 bits como primitivo, você não poderá, em nenhum momento, usar essa funcionalidade (finja que ele está limitado a 64 bits). - Outro ponto que não está claro (embora não deva alterar nenhuma das respostas válidas atuais): embora
c
possa ser interpretado como o número de caracteres impressos ou o número de espaços após o decimal, seu programa deve usar dec
alguma forma de maneira relevante para decidir quantos caracteres imprimir. Em outras palavras,divide(2,3,2)
deve ter uma saída muito menor do quedivide(2,3,500)
; não é bom imprimir 500 caracteres sem levar em consideraçãoc
. - Na verdade, eu não ligo para o nome da função.
d
é bom para fins de golfe.
Entrada
Uma chamada de função e leitura stdin
são aceitas. Se você ler stdin
, qualquer caractere que não esteja no conjunto [-0123456789]
é considerado um delimitador de argumento.
Resultado
Caracteres stdout
conforme descrito acima.
Exemplo
para divide(2,3,5)
, todos os itens a seguir são saídas aceitáveis:
0.666
0.667
.6666
.6667
0.666
0.667
.6666
.6667
+0.666
+0.667
+.6666
+.6667
Outro exemplo: para divide(371,3,5)
o seguinte, são todas as saídas aceitáveis:
123.6
123.7
123.6
123.7
+123.6
+123.7
123.66666
123.66667
123.66666
123.66667
+123.66666
+123.66667
E para divide(371,-3,5)
o seguinte são todos aceitáveis:
-123.6
-123.7
-123.66666
-123.66667
92,3,5
a resposta seria, por exemplo, #30.67