Terminando, Puramente Periódico ou Eventualmente Periódico?

21

Introdução

Um decimal é finalizado se tiver um número finito de dígitos decimais. Por exemplo, 0,4 (2/5) está sendo finalizado porque possui um dígito decimal.

Um decimal é puramente periódico se tiver um número infinito de dígitos decimais e não tiver dígitos decimais antes de sua repetição (a parte do decimal que se repete.) Por exemplo, 0.142857142857142… (1/7) é puramente periódico porque possui repetição 142857, que começa a se repetir imediatamente após o ponto decimal.

Um decimal é eventualmente periódico se tiver um número infinito de dígitos decimais e tiver um número finito de dígitos decimais antes de sua repetição (a parte do decimal que se repete). Por exemplo, 0,166666666666666… (1/6) é eventualmente periódico porque seu repetir 6 começa a repetir após 1.

Sua tarefa

Escrever um programa ou função que, quando dadas números de p e de q (inteiros, 0 <= p < q <= 100), vai determinar se a representação decimal de p / q é que encerra, puramente periódica, ou, eventualmente, periódica.

Você deve saída ase de terminação (ou seja, 0,1), bse é puramente periódica (ou seja, 0,333 ...), ou cse é Eventualmente periódica (ou seja, 0,166 ...), onde a, be cexistem, cordas constantes distintos de sua escolha.

Casos de teste

0/1 => Terminating
0/2 => Terminating
1/2 => Terminating
0/3 => Terminating
1/3 => Purely Periodic
2/3 => Purely Periodic
0/4 => Terminating
1/4 => Terminating
2/4 => Terminating
3/4 => Terminating
0/5 => Terminating
1/5 => Terminating
2/5 => Terminating
3/5 => Terminating
4/5 => Terminating
0/6 => Terminating
1/6 => Eventually Periodic
2/6 => Purely Periodic
3/6 => Terminating
4/6 => Purely Periodic
5/6 => Eventually Periodic
0/7 => Terminating
1/7 => Purely Periodic
2/7 => Purely Periodic
3/7 => Purely Periodic
4/7 => Purely Periodic
5/7 => Purely Periodic
6/7 => Purely Periodic
0/8 => Terminating
1/8 => Terminating
2/8 => Terminating
3/8 => Terminating
4/8 => Terminating
5/8 => Terminating
6/8 => Terminating
7/8 => Terminating
0/9 => Terminating
1/9 => Purely Periodic
2/9 => Purely Periodic
3/9 => Purely Periodic
4/9 => Purely Periodic
5/9 => Purely Periodic
6/9 => Purely Periodic
7/9 => Purely Periodic
8/9 => Purely Periodic
0/10 => Terminating
1/10 => Terminating
2/10 => Terminating
3/10 => Terminating
4/10 => Terminating
5/10 => Terminating
6/10 => Terminating
7/10 => Terminating
8/10 => Terminating
9/10 => Terminating
0/11 => Terminating
1/11 => Purely Periodic
2/11 => Purely Periodic
3/11 => Purely Periodic
4/11 => Purely Periodic
5/11 => Purely Periodic
6/11 => Purely Periodic
7/11 => Purely Periodic
8/11 => Purely Periodic
9/11 => Purely Periodic
10/11 => Purely Periodic
0/12 => Terminating
1/12 => Eventually Periodic
2/12 => Eventually Periodic
3/12 => Terminating
4/12 => Purely Periodic
5/12 => Eventually Periodic
6/12 => Terminating
7/12 => Eventually Periodic
8/12 => Purely Periodic
9/12 => Terminating
10/12 => Eventually Periodic
11/12 => Eventually Periodic
0/13 => Terminating
1/13 => Purely Periodic
2/13 => Purely Periodic
3/13 => Purely Periodic
4/13 => Purely Periodic
5/13 => Purely Periodic
6/13 => Purely Periodic
7/13 => Purely Periodic
8/13 => Purely Periodic
9/13 => Purely Periodic
10/13 => Purely Periodic
11/13 => Purely Periodic
12/13 => Purely Periodic
0/14 => Terminating
1/14 => Eventually Periodic
2/14 => Purely Periodic
3/14 => Eventually Periodic
4/14 => Purely Periodic
5/14 => Eventually Periodic
6/14 => Purely Periodic
7/14 => Terminating
8/14 => Purely Periodic
9/14 => Eventually Periodic
10/14 => Purely Periodic
11/14 => Eventually Periodic
12/14 => Purely Periodic
13/14 => Eventually Periodic
0/15 => Terminating
1/15 => Eventually Periodic
2/15 => Eventually Periodic
3/15 => Terminating
4/15 => Eventually Periodic
5/15 => Purely Periodic
6/15 => Terminating
7/15 => Eventually Periodic
8/15 => Eventually Periodic
9/15 => Terminating
10/15 => Purely Periodic
11/15 => Eventually Periodic
12/15 => Terminating
13/15 => Eventually Periodic
14/15 => Eventually Periodic

Você pode encontrar todos os casos de teste aqui .

Você tem permissão para escolher seus próprios 3 valores para a saída, mas deve ficar claro qual é.

Lembre-se de que isso é , portanto o código com o menor número de bytes vence.

Dicas

Terminando:

A fatoração primária de um denominador decimal de terminação na forma mais simples consiste apenas em 2s e 5s.

Puramente Periódico:

A fatoração primária de um denominador decimal puramente periódico na forma mais simples não inclui 2s ou 5s.

Eventualmente Periódico:

A fatoração primária de um denominador decimal eventualmente periódico da forma mais simples inclui pelo menos um 2 ou 5, mas também inclui outros números.

Classificação

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

# Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

# Perl, 43 + 2 (-p flag) = 45 bytes

Você também pode transformar o nome do idioma em um link que será exibido no snippet da tabela de classificação:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Oliver Ni
fonte
2
Quase duplicado
Peter Taylor
2
Se eu pensasse que era na verdade uma duplicata, teria votado de perto. Há uma razão pela qual eu usei a palavra " quase ".
21416 Peter
11
dada uma fração na forma p / q Dado como? Podemos considerar numerador e denominador como argumentos de função separados?
Dennis
2
Podemos gerar um valor não constante que atenda a uma condição específica, como algo falso para terminar, 1 para puramente periódico e algo maior que 1 para eventualmente periódico?
ETHproductions
11
Não, 1/13 é puramente periódico porque o repetido é '076923'. O 0 se repete com o repetido.
Oliver Ni

Respostas:

8

Gelatina , 10 bytes

:gÆfḍ⁵ṢQ¬Ḅ

Aceita denominador e numerador (nessa ordem) como argumentos. Retorna 0 para finalização, 1 para puramente periódico e 2 para eventualmente periódico. Experimente online! ou verifique todos os casos de teste .

Como funciona

:gÆfḍ⁵ṢQ¬Ḅ  Main link. Arguments: d (denominator), n (numerator)

 g          Compute the GCD of d and n.
:           Divide d by the GCD, yielding the denominator of the simplified form.
  Æf        Yield all prime factors of the previous result.
    ḍ⁵      Test 10 for divisibility by each prime factor.
            This yields 1 for 2 and 5, 0 for all other primes.
      Ṣ     Sort the resulting Booleans.
       Q    Unique; deduplicate the sorted Booleans.
        ¬   Logical NOT; replace 0 with 1 and vice versa to yield one of the
            following arrays.
              [    ]  <- no prime factors (denominator 1)
              [   0]  <- only 2 and 5
              [1   ]  <- neither 2 nor 5
              [1, 0]  <- mixed
         Ḅ  Unbinary; convert from base 2 to integer.
            This maps [] and [0] to 0, [1] to 1, and [1, 0] to 2.
Dennis
fonte
11

JavaScript (ES6), 70 .. 68 53 bytes

f=(a,b,s=[],x)=>a?(s[a]^=a)?f(a*10%b,b,s,x||a):x==a:0

Retorna 0 para finalização, verdadeiro para puramente periódico e falso para eventualmente periódico.

Como funciona

O que estamos fazendo aqui é simular uma divisão manualmente:

  1. a?...:0- Se o numerador for zero, paramos aqui e retornamos 0. A sequência está terminando .
  2. (s[a]^=a)?...:x==a- Se já encontramos esse numerador antes, significa que a sequência é periódica e será repetida para sempre. Paramos aqui e retornamos truese afor igual ao primeiro valor xda sequência ( puramente periódico ) ou falsese não for ( eventualmente periódico ).
  3. f(a*10%b,b,s,x||a)- Caso contrário, multiplicamos o numerador apor 10. Calculamos o restante da divisão pelo denominador b. E repetimos o processo usando esse restante como o novo numerador. (Também passamos acomo o primeiro valor da sequência, se ainda não estiver armazenado x.)

Exemplo

  • Azul : numerador = 1
  • Verde : denominador = 7
  • Vermelho : multiplicações por 10
  • Preto : restos
  • Cinza : dígitos do quociente (nós realmente não nos importamos com eles aqui, e o código acima não os está computando)

divisão

Arnauld
fonte
9

Python, 62 61 59 bytes

f=lambda n,d,r=[0,0]:(r[:3]+r).count(n)or f(10*n%d,d,r+[n])

Imprime 1 para eventualmente periódico, 2 para puramente periódico e 4 para finalização.

Verifique todos os casos de teste em repl.it .

Dennis
fonte
Fascinante! O que *rfaz?
ETHproductions
Descompacta a tupla r . f(1, *(2, 3), 4)é equivalente a f(1, 2, 3, 4).
Dennis
Portanto, seriam 56 bytes em JS:f=(n,d,...r)=>n in r?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
ETHproductions 11/11
Meu ruim, 63 bytes (eu esqueci que inserve a um propósito muito diferente em JS e em Python):f=(n,d,...r)=>~r.indexOf(r)?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
ETHproductions
@ETHproductions Neat. Eu acho que f=(n,d,...r)=>~(i=r.indexOf(n))?n&&!i:f(10*n%d,d,...r,n)iria funcionar também.
Dennis
6

Perl, 49 46 45 bytes

Inclui +3 para -p

Baseado na idéia elegante de Dennis , mas implementado de maneira perniciosa

Forneça números de entrada no STDIN

terminating.pl <<< "2 26"

termninating.pl:

#!/usr/bin/perl -p
/ /;1until$a{$_=$_*10%$' or$`}++;$_=$a{$`}

Imprime um 2 se terminar. 1 se periódico e nada se eventualmente periódico

Ton Hospel
fonte
Todos os números em um determinado grupo precisam fornecer o mesmo valor.
Oliver Ni
@OliverNi Eles fazem agora
Ton Hospel
3

Lote, 247 bytes

@set/af=%1,g=%2
:g
@if not %f%==0 set/ah=g,g=f,f=h%%g&goto g
@set/ae=d=%2/g
:l
@set/ag=-~!(d%%2)*(!(d%%5)*4+1)
@if not %g%==1 set/ad/=g&goto l
@if %d%==1 (echo Terminating)else if %d%==%e% (echo Purely Periodic)else echo Eventually Periodic

Usa meu truque rápido do gcd10 de Fração para o decimal exato . Obviamente, eu poderia salvar um monte de bytes usando um formato de saída personalizado.

Neil
fonte
Por que você não faz apenas @if %d%==1 (echo T)else if %d%==%e% (echo P)else echo Epara salvar 42 bytes?
ETHproductions
Obviamente, eu poderia salvar um monte de bytes usando um formato de saída personalizado.
Oliver Ni
@ETHproductions Acho que ele não quer, como Oliver observou com uma citação.
Erik the Outgolfer
3

JavaScript (ES6), 91 88 85 79 75 74 78 bytes

f=(n,d,g=(a,b)=>b?g(b,a%b):a,t=g(d/=c=g(n,d),10))=>n*~-d?t-1?f(n/c,d/t)/0:1:+f

Saídas NaNpara finalização, 1puramente periódicas e Infinityeventualmente periódicas.

Snippet de teste

Explicação

Primeiro, dividimos n e d por gcd (d, n) , para reduzir a fração à sua forma mais simples. Isso nos permite evitar situações como 2/6 em que o resultado seria calculado como puramente periódico. Também definimos a variável t como gcd (d, 10) ; isso será usado mais tarde.

A primeira verificação é se n é 0 ou d é 1 . Se n * (d-1) for 0, retornamos +fou NaN : a fração está terminando .

A próxima verificação é se t é 1 . Nesse caso, retornamos 1 : a fração é puramente periódica .

Se t não for 1 , dividimos d por t , executamos toda a função novamente e dividimos por 0. Se n / (d / t) estiver terminando, isso retornará NaN / 0 = NaN : a fração está terminando . Caso contrário, ele retornará 1/0 = Infinito : a fração é eventualmente periódica .

ETHproductions
fonte
Onde está a redução para a forma mais simples?
Ton Hospel
@TonHospel Fixed.
ETHproductions
@ Arnauld Não sei ao certo o que você quer dizer. Retorna Infinitypara todos esses valores.
ETHproductions
@ Arnauld Ah, cara, eu pensei que poderia me safar sem me ajustar n... Obrigado por apontar isso.
ETHproductions
3

Mathematica, 41 bytes

Ordering@{d=Denominator@#,GCD[d,10^d],1}&

Saída {3,1,2}se a entrada tiver uma expansão decimal final, {2,3,1}se a entrada tiver uma expansão decimal puramente periódica e {3,2,1}se a entrada tiver uma expansão decimal eventualmente periódica.

Baseado no truque furtivo: se dé o denominador de uma fração em termos mais baixos, então o maior divisor comum ded e 10^digual a dse dtem apenas 2s e 5s em sua fatoração primária; é igual a 1se dnão tem 2s nem 5s em sua fatoração primária; e é igual a um número inteiro intermediário se dtiver 2s / 5s e outros números primos.

A Orderingfunção apenas informa onde estão os menores, os menores e os maiores elementos do triplo, com os vínculos quebrados da esquerda para a direita.

Falha: retorna a saída variante em {1,2,3}vez de {3,1,2}se a entrada for 0.

Mathematica, 46 bytes, perverso

b[a][[Log[d=Denominator@#,GCD[d,10^d]]]][[1]]&

Devoluções a[[1]] se a entrada tiver uma expansão decimal final, b[[1]]se a entrada tiver uma expansão decimal puramente periódica e b[a]se a entrada tiver uma expansão decimal eventualmente periódica. Lança um erro em todos os casos!

Como acima, queremos saber se esse maior divisor comum é igual a 1, d ou em algum ponto intermediário. O logaritmo base-d desse MDC é igual a 0, 1 ou algo no meio.

Agora começamos a torturar o Mathematica. b[a][[n]]indica a nparte th da expressão b[a]. Então b[a][[1]]retorna a; b[a][[0]]retornos b; e b[a][[x]]ondex há um número entre 0 e 1, faz com que o Mathematica gere o erro "Part :: pkspec1: a expressão xnão pode ser usada como uma especificação de peça". e retornos b[a][[x]]não avaliados.

Isso já distingue os três casos adequadamente, exceto que a saída do caso eventualmente periódico é b[a][[x]], o que não é constante, porque xé o logaritmo real de algo. Então, aplicamos [[1]]as saídas já descritas. Por causa de como o Mathematica representa internamente b[a][[x]], o resultado b[a][[x]][[1]]é simples b[a]. Por outro lado, aplicar [[1]]a aresultados resulta em um erro diferente "Part :: partd: especificação de peça a [[1]] é maior que a profundidade do objeto". e retorna sem avaliação a[[1]](e da mesma forma para b).

Falha: está na entrada 0, retornando em b[a]vez de a[[1]].

Greg Martin
fonte
2

C 173 bytes

Pega dois números inteiros de stdin, imprime 1 para puramente periódico, -1 para eventualmente periódico e 0 para finalização.

int r;main(_,n,d){_-1?_-2?d-1?d%2&&d%5?r=1:d%2?main(3,n,d/5):main(3,n,d/2),r=r?-1:0:r=0:d?main(2,d,n%d):r=n:scanf("%d %d",&n,&d),main(2,n,d),main(3,n/r,d/r),printf("%d",r);}

Ungolfed:

// returns 1 for periodic, 0 for terminating, <0 for eventually periodic
int periodic(int num, int den) { // 3
    if (den == 1) return 0;
    if (den % 2 && den % 5) // pure periodic
        return 1;
    if (den % 2) return periodic(num,den/5) ? -1 : 0;
    return periodic(num,den/2) ? -1 : 0;
}

int gcd(int num, int den) { // 2
    if (den) 
        return gcd(den,num%den);
    return num;
}

int main(n,d) // 1
{
    scanf("%d %d",&n,&d);
    printf("%d",periodic(n/gcd(n,d),d/gcd(n,d)));
    return 0;
}   

Meia-golfe:

int r;main(_,n,d){
    _-1? 
    _-2?
    // periodic
    d-1?
        d%2&&d%5?
            r=1:
                d%2?
                    main(3,n,d/5): //periodic
                    main(3,n,d/2), //periodic
                        r=r?-1:0:
                r=0
    // gcd
    :d?main(2,d,n%d):r=n // gcd
    // main
    :scanf("%d %d",&n,&d),
     main(2,n,d), // gcd
     main(3,n/r,d/r), // periodic
     printf("%d",r);
}
LambdaBeta
fonte
2

Na verdade , 15 bytes

Isto é baseado na resposta de Dennis 'Jelly . 0 está terminando, 1 é puramente periódico e 2 é eventualmente periódico. Sugestões de golfe são bem-vindas. Experimente online!

▼Ny9u♀%SR♂b╔2@¿

Ungolfing

      Implicit input [a, b].
▼     Divide a and b by gcd(a,b).
Ny    Get the unique prime divisors of the reduced denominator.
9u    Push 10.
♀%    10 mod every member of uniq_p_d.
SR    Sort the mods and reverse.
♂b    Logical buffer. Converts every (10 % p != 0) to 1, and everything else to 0.
        Meaning if 2 or 5 divided b, they are now 0, and every other prime is now 1.
╔     Uniquify the list.
        If terminating, return [0].
        If purely periodic, return [1].
        If eventually periodic, return [1, 0].
        Else, (if b was 1), return [].
2@¿   Convert from binary to decimal. Return 0, 1, or 2.
      Implicit return.
Sherlock9
fonte
1

Mathematica, 44 bytes

If[ListQ@Last@#,Length@#==1]&@@RealDigits@#&

Retorna Nullpara rescisão, Truepor puramente periódica e, Falseeventualmente, periódica.

Explicação

RealDigits

Encontre a expansão decimal de N. (dígitos repetidos são cercados por uma cabeça extra List {}).

ListQ@Last@#

Verifique se o último elemento da expansão decimal é a List.

Length@#==1

Se a condição acima for True, verifique se a expansão decimal inteira consiste em uma coisa. (A Listconta como uma entidade). (retorna Trueou False)

(Se a condição for False, então a Nullé retornado porque não há terceiro argumento para If)

JungHwan Min
fonte
1

Pitão , 31 27 bytes

AQ={P/HiGH?l@H=j25T?l-HT1Z2

Entrada

4,12

Você pode tentar aqui . Imprime 1 para eventualmente periódico, 2 para puramente periódico e 0 para finalização. Esta é a minha primeira vez respondendo em codegolf. Todas as sugestões são bem-vindas.

Explicação

AQ                                              // 1st element to G and 2nd element to H
    ={P                                         // Assign unique prime factors to H
        /H                                      // Simplify denominator
            iGH                                 // Find GCD
                ?l                              // Check length of filtered H
                    @H                          // Filter H by Y
                        =j25T                   // Assign a set [2,5] to T
                                ?l-HT           // Check length of H - T
                                        1Z2     // Print result

Observe que [2,3] filtrou por [2,5] = [2], mas [2,3,5] - [2,5] = [3].

Joshua
fonte
1

PARI / GP, 64 bytes

f(x,y)=if(setminus(factor(y=y/gcd(x,y))[,1]~,[2,5]),gcd(y,10)>1)

Não produz nada para terminar, 0 para puramente e 1 para eventualmente periódico.

Não é muito chique, eu esperava algo melhor quando comecei.

Peneiradores cristãos
fonte
1

05AB1E , 16 11 bytes

Guardado 5 bytes graças a @Adnan!

¿²r/fTrÖbÙJ

Imprime 0 para Puramente Periódico, 1 para Terminar e 10 para Eventualmente Periódico.

Explicação:

                 # Implicit input
                 # Implicit input
  ¿              # Take GCD of numbers
   ²             # Push top value from input register
    r            # Reverse stack order
     /           # Divide (denominator by GCD)
      f          # Find unique prime factors
       TrÖ       # Test 10 for divisibility
          b      # Convert (True -> 1, False -> 0)
           Ù     # Deduplicate array
            J    # Join chars in array
                 # Implicit print

A entrada é tomada como p nova linha q .

Experimente online!

Oliver Ni
fonte
É bom ver você usando 05AB1E :). Osabie também usa entrada implícita que nos permite remover os dois primeiros I. Além disso, uma constante predefinida para 10é T. Mesmo para 2B, que é b:).
Adnan
Você também pode usar os registradores de entrada, que nos dão ¿²r/fTrÖbÙJcomo o código final :).
Adnan
1

PHP, 126 bytes

$d=$argv[2];$a[]=$n=$argv[1];while($n%$d&&!$t){$n*=10;$t=in_array($n%=$d,$a);$a[]=$n;}if($a[1]&&$t)$t+=$a[0]!=end($a);echo+$t;

Imprime 0 para terminado e 1 para 2 puramente periódicos para eventualmente. Deixe-me explicar se um numerador está duas vezes na matriz aqui inicia a sessão periódica se tiver terminado o echo end($a);valor é 0 Se você não confia em mim, insira $t=count($a)>$d?2:0;o loop

Para tornar mais claro, adicione print_r($a);ou var_dump($a);ou json_encode($a);após o loop

você pode ver um numerador duas vezes ou zero no final da matriz, se um numerador contar duas vezes os itens entre os dois itens e conseguir o comprimento do periódico, além de ver a posição do primeiro numerador em que o periódico começa.

Então, depois disso, podemos encontrar a posição e o comprimento da sequência periódica com if($t){echo $p=array_search(end($a),$a);echo $l=count($a)-$p-1;}

Visualize o periódico

$d=$argv[2];
$a[]=$n=$argv[1]; #array numerator
$r[]=$n/$d^0; #array result of the division
$r[]=".";
while($n%$d&&!$t){
    $n*=10; 
    $n-=$d*$r[]=$n/$d^0;
    $t=in_array($n%=$d,$a); #stop if numerator is twice 
    $a[]=$n;
}
if($a[1]&&$t)$t+=$a[0]!=end($a); #periodic term starts directly?
if($t){
    echo $p=array_search(end($a),$a)."\n"; #output the beginning position of the periodic term
    echo $l=count($a)-$p-1; #output the length of the periodic term
    echo "\n";
    echo str_repeat(" ",2+$p).str_repeat("_",$l-1)."\n"; #visualize the periodic term
    #echo join(array_slice($r,0,1+$p)).join(array_slice($r,1+$p))."\n";# if you want only the periodic term 
    echo join($r); #result if the division
}
echo+$t; # 0 terminated 1+2 periodic 2 periodic start not directly

Saída visualizar o termo periódico

1/18
   _
0.05

1/12
    _
0.083

1/13
  ______
0.076923

1/14
   ______
0.0714285

Outra maneira com 130 bytes

$r=bcdiv(($z=$argv)[1],$z[2],400);for($p=2;$i++<200;)if(substr($r,2,$i)==substr($r,2+$i,$i))$p=1;echo strlen(rtrim($r,0))<50?0:$p;

Versão expandida

$r=bcdiv(($z=$argv)[1],$z[2],400); # 100 is the maximal denominator 
# we need a string length with the double value of the sum the length from 1 until the denominator
for($p=2;$i++<200;)if(substr($r,2,$i)==substr($r,2+$i,$i))$p=1;
# all results begin with 0. 
#take two substrings with the same length after that and comparize both. 
#if we found 2 same substrings we have a periodic which starts at the first decimal place
echo strlen(rtrim($r,0))<50?0:$p; 
# if we can trim the length of the result we have a terminated result
Jörg Hülsermann
fonte
Veja também Fração para decimal exato .
Neil
@ Neil você quer dizer que devo modificar o código para responder à outra pergunta?
Jörg Hülsermann
Bem, eu estava pensando que a outra pergunta não tem uma resposta PHP; talvez você queira fornecer um.
Neil
@RosLuP No exemplo 3/53, essa matriz será criada [3,30,35,32,2,20,41,39,19,31,45,26,48,3]
Jörg Hülsermann
3/103 = 0,0291262135922330097087378640776699029126213592233009708 e, portanto, no mesmo período pode aparecer o mesmo dígito (por exemplo, o dígito 7 entre 00 ... 00 acima) Mas se o array de que você fala não é o dígito, mas o array do {d = 10 * (d% b)} onde o dígito é d / c do que eu acho que é ok há apenas um valor d_i a cada período ...
RosLuP