С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Shroud007
0 / 0 / 0
Регистрация: 30.05.2017
Сообщений: 3
1

Определить, какой будет N-я цифра в последовательности Фибоначчи

30.05.2017, 20:27. Просмотров 251. Ответов 1

Подскажите, как сделать эту задачу:
Ряд чисел Фибоначчи представляет собой последовательность натуральных чисел, такую, что первое и второе числа равны единице, а каждое следующее равно сумме двух предыдущих: 1 1 2 3 5 8 13 21 34 … Числа Фибоначчи выписываются одно за другим вплотную. Определите, какой будет N-я цифра в такой последовательности.
Вход. Целое число N (1 ≤ N ≤ 2000)N (1 ≤ N ≤ 2000).
Выход. NN-я цифра последовательности.

Смог написать все до главной части программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include<iostream>
#include<iomanip>
#include<string>
#include<vector>
#define PB push_back
#define ll long long
using namespace std;
typedef vector<int> lll;
const long long e=1000000000, k=9;
istream& operator >>(istream& stream,lll& a){
string s,r; stream>>s;
for(int i=s.size();i>0;i-=k){
int j=i-k;
if(j>=0)r=s.substr(j,k); else r=s.substr(0,i);
a.PB(stoi(r));}
return stream;}
ostream& operator <<(ostream& stream,lll a){
stream<<a[a.size()-1];
for(int i=a.size()-2;i>=0;--i)stream<<setw(9)<<setfill('0')<<a[i];return stream;}
bool operator >(lll a,lll b){
if(a.size()>b.size())return true;
if(a.size()<b.size())return false;
for(int i=a.size()-1;i>=0;--i){
if(a[i]>b[i])return true;
if(a[i]<b[i])return false;}
return false;}
lll operator +(lll a,lll b){
lll c;
int i,r=0;
if(a.size()<b.size())swap(a,b);
for(i=0;i<a.size();i++){
if(i<a.size())r+=a[i];
if(i<b.size())r+=b[i];
c.push_back(r%e);
r/=e;}
if(r) c.push_back(r);
return c;}
lll operator -(lll a,lll b){
lll c;int i,r=0;
for(i=0;i<a.size();++i){
r+=a[i];
if(i<b.size())r-=b[i];
if(r<0){c.PB(r+10);r=-1;}
else{c.PB(r%10);r=0;}}
while(c.size()>1&&c.back()==0)c.pop_back();
return c;}
lll operator *(lll a,ll b){
lll c;int i;ll r=0;
if(b==0){c.PB(0);return c;}
for(i=0;i<a.size();++i){
r+=a[i]*b;
c.PB(r%e);r/=e;}
while(r){c.PB(r%e);r/=e;}
return c;}
lll operator *(lll a,lll b){
lll c,d(1,0);int i,j;
if(a==d||b==d)return d;
if(b.size()>a.size())swap(a,b);
for(i=0;i<b.size();++i){
c=a*b[i];
for(j=0;j<i;j++)c.insert(c.begin(),0);
d=d+c;}
return d;}
ll operator % (lll a,ll b) {
lll c;
int i;
ll r=0,t;
for(i=a.size()-1;i>=0;i--){
r=r*10+a[i];
t=r/b;
r-=t*b;}
return r;}
lll operator /(lll a,ll b) {
    lll c; int i; ll r=0,t;
    for (i=a.size()-1;i>=0;--i){
    r=r*e+a[i];t=r>>1;
    c.insert(c.begin(),t);r-=t<<1;}
    while (c.size()>1&&c[c.size()-1]==0)
    c.resize(c.size()-1);
    return c;}
Пытаюсь адаптировать под длинку обычную задачку с Фибоначчи, но ничего не выходит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
main () {
int n,i=0,a=0,b=1,c=0;
cin>>n;
while (i<n) {
    a=b;
    b=c;
    c=a+b;
    i++;
}
cout<<c;
}
Вопрос: как должна выглядеть основная часть программы, начиная с int main () ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2017, 20:27
Ответы с готовыми решениями:

Определить, какая цифра стоит на заданном месте в последовательности
всем вечер добрый. интересует алгоритм решения к двум задачам. честно говоря,...

Определить, сколько чисел в последовательности, первая цифра которых 2
Здравствуйте,помогите пожалуйста! Дано 10 целых чисел от 1 до 50....

Определить номер пары цифр, в которую входит к-я цифра последовательности
Помогите пожалуйста.. Совсем не могу разобраться что к чему...Спасибо Даны...

Определить, на какой позиции слева находится первая встреченная четная цифра
Как сделать? Определить, на какой позиции слева находится первая встреченная...

Определить k-ю цифру последовательности в которой выписаны подряд числа Фибоначчи
Условие: Задано натуральное число k. Определить k-ю цифру ...

1
Programmist5
Заблокирован
30.05.2017, 20:45 2
C++
1
2
3
4
5
6
7
8
int n, i=0, a=1, b=1, c=0;
while(i<n)
{
    c=a+b;* * 
    a=b;
* * b=c;* * 
* * i++;
}
- может как-то вот так попробуете. Тот код, что выше вообще можно стереть.

Добавлено через 5 минут
Вот, сделал. Числа начинаются с 1.
C++
1
2
3
4
5
6
7
8
9
10
11
int n, i=2, a=1, b=1, c=0;
cout << "\nVvedite nomer chisla Fibonachchi:\n";
cin >> n;
while(i < n)
{
    c = a+b;
    a = b;
    b = c;
    i++;
}
cout << "c = " << c;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2017, 20:45

Определить, какая цифра находится в заданной позиции в последовательности степеней десятки
Ограничение времени: 1.0 секунды Ограничение памяти: 16 МБ Представим себе...

Дано целое k от 1 до 180. Определить, какая цифра находится в k-ой позиции последовательности
Товарищи, задача такая: Дано целое k от 1 до 180. Определить, какая цифра...

Определить, какая цифра чаще всего встречается в десятичной записи элементов последовательности
На вход программы поступает последовательность из N натуральных чисел....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru