Ввести натуральное число N и вывести значение числа N\1, выделив период дроби....

0 голосов
130 просмотров

Ввести натуральное число N и вывести значение числа N\1, выделив период дроби. Например:1\2=0.5 или 1\7=0,(142857) Решение на языке Pascal.


Информатика (25 баллов) | 130 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
// PascalABC.NET 3.3, сборка 1627 от 27.01.2018
// Внимание! Если программа не работает, обновите версию!

function CycleFraction(n:integer):string;
begin
  if n=1 then begin Result:='1'; Exit end;
  var ost:=new SortedList;
  var res:=new List;
  ost.Add(1,1);
  var a:=1;
  var k:=1;
  while True do begin
    a*=10;
    var r:=a div n;
    res.Add(r);
    a:=a mod n;
    if ost.ContainsKey(a) then begin
      var p:=ost.Get(a);
      Result:=res.JoinIntoString('');
      Result:='0.'+Result?[:p]+(a<>0?'('+Result?[p:]+')':''.ToString);
      exit
      end
    else begin
      k+=1;
      ost.Add(a,k);
      end
    end
end;

begin
  var n:=ReadInteger('n=');
  Writeln('1/',n,' = ',CycleFraction(n))
end.

Примеры
n= 2
1/2 = 0.5

n= 7
1/7 = 0.(142857)
 
n= 28
1/28 = 0.03(571428)

n= 118
1/118 = 0.0(0847457627118644067796610169491525423728813559322033898305)
(150k баллов)