Дано натуральное k. Напечатать k-ю цифру последовательности 1123581321…, в которой выписаны подряд все числа Фибоначчи — Pascal(Паскаль)

uses crt;
var k,i,s,b,c,n,a:longint;
function Fib(i:integer):longint;{функция создания чисел Фибоначчи}
begin
if i<=2 then Fib:=1{первые 2 числа=1}
else
Fib:=Fib(i-2)+Fib(i-1);{остальные равны сумме 2х предыдущих}
end;
begin
clrscr;
write('k=');readln(k);{задаем номер цифры в ряду}
writeln('Rjad: ');
s:=0;i:=0;{суммарное количество цифр в ряду, номер очередного числа Фибоначчи}
while s<k do{пока количество цифр меньше заданного номера}
   begin
     i:=i+1;{берем очередной номер}
     b:=Fib(i);{вычисляем число}
     c:=1;{пока цифра одна}
     n:=10;{основание десятичной системы счисления}
     while b div n<>0 do{пока число делится на 10}
        begin
          n:=n*10;{увеличиваем делитель 10, 100, 1000...}
          c:=c+1;{считаем цифры в числе}
        end;
    s:=s+c;{считаем общее количество цифр}
    write(b);{выводим ряд на экран}
  end;
s:=s-c;{вычитаем количество цифр последнего числа, становимся перед заданным номером, или на нем}
n:=n div 10;{уменьшаем делитель в 10 раз}
while s<>k do{пока количество цифр в ряду не равно заданному номеру}
  begin
   a:=b div n mod 10;{отделяем по 1 цифре от последнего числа и запоминаем ее}
   n:=n div 10;{уменьшаем делитель}
   s:=s+1;{добавляем длину на 1, пока не придем обратно в заданный номер}
 end;
writeln;
write('Zadannaia cifra=',a);{выводим цифру на позиции заданного номера}
readln;
end.

Leave a Comment

+ 1 = 4