Ребят, помогите пожалуйста, начинающему программисту написать решение, желательно на JAVA, можно и на других языках, требуется найти такой член последовательности Фиббоначи, количество цифр в котором 1162.
import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.*;
class FacorialOfBigNuumber {
public static void main (String[] args) {
int n = 12;
int a = 1, b = 1;
System.out.print(a + " " + b);
int fib = 2, i = 2;
while (i < n) {
fib = a + b;
a = b;
b = fib;
System.out.print(" " + fib);
i++;
String s = String.valueOf(fib);
int z = s.length();
}
}
}
Код, который выдаёт последовательность имеется у меня, в зависимости от количества членов (n). Как бы мне этот результат превратить в строку, и через substring проверить элементы строки, да и ещё, считая, количество символов в каждом substring. Если количество символов =1162, то программа должна выдать номер этого члена.
Как это всё реализовать в коде? может у кого есть проще решения?
Java
Нахождение номера члена последовательности Фиббоначи. Да ещё и посчитать сколько цифр в этом члене.
5559 — если считать, что последовательность начинается с 1: {0 1 1 2 3 …}
5558 — если считать, что последовательность начинается с 1: {1 1 2 3 …}
Вот это число: 1598893390421097367005297952950441325280171555686802554527860317037981461288090667393611126745000425740561324936383003176027609337756502367571129976599927041472701038252912026269393959696061626658810998608518687614593162755801656414599393834086782017015851919495872156146140027475710437331239883490299060434390712134325718791993667586602515068733484188455976809186159032004805071660704468927086476655821045158252791645744622493005573792578530490893651522159368649376018056816033645590686939702812229996353802106155056894161053704034432288520911206360552124159968461306526361186011449723013146002014111014857421544210003482239621920687586697186765823463736934910368496682454169951717042200300031959942153690447731677381293797260520850300060222991587516725324459105589522928242570128815723250348734114411840555855891097712380881708499883754463955505968944181885547839627409250699661036480806706888557965921177486930496244342931461397991348568748773740220892650662368821299128067865577427037399738574036478092462898538957426770682105349287120526385060450927665246236943890176674481559614648509158295369662405133399774241013552641099739587066077365302870268774925129
5558 — если считать, что последовательность начинается с 1: {1 1 2 3 …}
Вот это число: 1598893390421097367005297952950441325280171555686802554527860317037981461288090667393611126745000425740561324936383003176027609337756502367571129976599927041472701038252912026269393959696061626658810998608518687614593162755801656414599393834086782017015851919495872156146140027475710437331239883490299060434390712134325718791993667586602515068733484188455976809186159032004805071660704468927086476655821045158252791645744622493005573792578530490893651522159368649376018056816033645590686939702812229996353802106155056894161053704034432288520911206360552124159968461306526361186011449723013146002014111014857421544210003482239621920687586697186765823463736934910368496682454169951717042200300031959942153690447731677381293797260520850300060222991587516725324459105589522928242570128815723250348734114411840555855891097712380881708499883754463955505968944181885547839627409250699661036480806706888557965921177486930496244342931461397991348568748773740220892650662368821299128067865577427037399738574036478092462898538957426770682105349287120526385060450927665246236943890176674481559614648509158295369662405133399774241013552641099739587066077365302870268774925129
Тимур Ябанжи
Спасибо
Тимур Ябанжи
А как вы его нашли, не поделитесь секретом?)
Программка на Scheme, которая считает числа Фибоначчи:
$ cat fib.lisp
(define (even? x) (= (remainder x 2) 0))
(define (fib n) (fib-iter 1 0 0 1 n))
(define (fib-iter a b p q count) (cond ((= count 0) b) ((even? count) (fib-iter a b (+ (* p p) (* q q)) (+ (* 2 p q) (* q q)) (/ count 2))) (else (fib-iter (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) p q (- count 1)))))
Число цифр в числе:
$ guile -l fib.lisp -c '(display (fib 5558))' | wc -c
1162
Само число:
$ guile -l fib.lisp -c '(display (fib 5558))(newline)'
1598893390421097367005297952950441325280171555686802554527860317037981461288090667393611126745000425740561324936383003176027609337756502367571129976599927041472701038252912026269393959696061626658810998608518687614593162755801656414599393834086782017015851919495872156146140027475710437331239883490299060434390712134325718791993667586602515068733484188455976809186159032004805071660704468927086476655821045158252791645744622493005573792578530490893651522159368649376018056816033645590686939702812229996353802106155056894161053704034432288520911206360552124159968461306526361186011449723013146002014111014857421544210003482239621920687586697186765823463736934910368496682454169951717042200300031959942153690447731677381293797260520850300060222991587516725324459105589522928242570128815723250348734114411840555855891097712380881708499883754463955505968944181885547839627409250699661036480806706888557965921177486930496244342931461397991348568748773740220892650662368821299128067865577427037399738574036478092462898538957426770682105349287120526385060450927665246236943890176674481559614648509158295369662405133399774241013552641099739587066077365302870268774925129
Нумерация с единицы:
$ guile -l fib.lisp -c '(display (fib 1))(newline)'
1
$ guile -l fib.lisp -c '(display (fib 2))(newline)'
1
$ guile -l fib.lisp -c '(display (fib 3))(newline)'
2
и так далее.
$ cat fib.lisp
(define (even? x) (= (remainder x 2) 0))
(define (fib n) (fib-iter 1 0 0 1 n))
(define (fib-iter a b p q count) (cond ((= count 0) b) ((even? count) (fib-iter a b (+ (* p p) (* q q)) (+ (* 2 p q) (* q q)) (/ count 2))) (else (fib-iter (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) p q (- count 1)))))
Число цифр в числе:
$ guile -l fib.lisp -c '(display (fib 5558))' | wc -c
1162
Само число:
$ guile -l fib.lisp -c '(display (fib 5558))(newline)'
1598893390421097367005297952950441325280171555686802554527860317037981461288090667393611126745000425740561324936383003176027609337756502367571129976599927041472701038252912026269393959696061626658810998608518687614593162755801656414599393834086782017015851919495872156146140027475710437331239883490299060434390712134325718791993667586602515068733484188455976809186159032004805071660704468927086476655821045158252791645744622493005573792578530490893651522159368649376018056816033645590686939702812229996353802106155056894161053704034432288520911206360552124159968461306526361186011449723013146002014111014857421544210003482239621920687586697186765823463736934910368496682454169951717042200300031959942153690447731677381293797260520850300060222991587516725324459105589522928242570128815723250348734114411840555855891097712380881708499883754463955505968944181885547839627409250699661036480806706888557965921177486930496244342931461397991348568748773740220892650662368821299128067865577427037399738574036478092462898538957426770682105349287120526385060450927665246236943890176674481559614648509158295369662405133399774241013552641099739587066077365302870268774925129
Нумерация с единицы:
$ guile -l fib.lisp -c '(display (fib 1))(newline)'
1
$ guile -l fib.lisp -c '(display (fib 2))(newline)'
1
$ guile -l fib.lisp -c '(display (fib 3))(newline)'
2
и так далее.
Тимур Ябанжи
Да уж, не хило
Язык непринципиален? Используйте язык со встроенной длинной арифметикой.
Например Python3 на http://ideone.com/ (__ - отступ)
f1=f2=1
n=10**1162
while f2 < n:
__f = f1+f2
__f1 = f2
__f2 = f
print(f2)
Например Python3 на http://ideone.com/ (__ - отступ)
f1=f2=1
n=10**1162
while f2 < n:
__f = f1+f2
__f1 = f2
__f2 = f
print(f2)
Тимур Ябанжи
у JAVA тоже есть длинная арифметика, Алексей, вы неправильно поняли суть проблемы :) Нужно посчитать не 1162 член последовательности, а тот член, в котором количетво цифер 1162 :)
если даже использовать не int а long, то в него поместятся числа от -9223372036854775808 до 9223372036854775807, это 19-значное число, а ты хочешь 1162-значное.
Тимур Ябанжи
Да это просто пример программы. Есть Bigintegher ещё
Похожие вопросы
- Подскажите пожалуйста, как в данном коде Java сделать так, чтоб при нажатии цифры 3 программа завершала свою работу?
- Помогите написать java программу нахождения максимального числа из 4-х
- как разбить четырехзначное число на цифры java
- почему одни переменные могут объявлять буквы другие цифры?
- Сколько языков программирования стоит выучить???
- Как вывести день недели по порядковому номеру java?
- За сколько времени можно стать веб разработчиком? и что лучше вуз или курсы 18 месяцев
- Стоит ли язык программирования Java выбирать новичку , и за сколько примерно можно его освоить ?
- Сколько времени займет на JAVA выполнение такого алгоритма?
- Как посчитать электроэнергию по счетчику правильно? сколько цифр надо записывать?