Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

злополучные числа фибоначчи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Остаток деления от числа фибоначчи http://www.cyberforum.ru/cpp/thread13731.html
подскажите, как максимально минимизировать такой алгоритм: #include <iostream> using namespace std; const int N = 2; void mult(long long a, long long b, long long res, long long d){ long...
C++ Алгоритм игры Быки -коровы в С++ сложно ли реализовать алгоритм игры Быки -коровы в С++ http://www.cyberforum.ru/cpp/thread13658.html
Делаем игру. Можете помочь? C++
Знаю, что ваще не по теме, но нормальных программистов, кроме как на специальных форумах, как этот, мы найти нигде не можем. Короче, нужны программисты на C++. Наверняка среди вас есть люди, кто...
Исходники асечного (ICQ) протокола C++
Народ, давно ищу одну вещь, решил создать ветку. У кого-нибудь есть исходники асечного (ICQ) протокола? Полностью рабочего. Нашел какую-то х... там отправка данных не работает... Поделитесь,...
C++ Пререзапуск сетевого адаптера http://www.cyberforum.ru/cpp/thread13462.html
Вобщем пишу прогу для автоматической смены IP сетевого интерфейса. как сменить IP разобрался, делается очень просто в реестре, но после смены значения ключа конечно же нужен перезапуск подключения и...
C++ qsort, рабочий день убит... Всем привет, Я, наверное, представляться не буду :) Вообщем, один мой рабочий день на этой неделе был убит такой вещью: делал я задачку на сортировку строк в матрице. Решил делать через qsort.... подробнее

Показать сообщение отдельно
Том Ардер
Модератор
Эксперт по математике/физике
3742 / 2355 / 293
Регистрация: 15.06.2009
Сообщений: 4,219
08.12.2009, 02:31
Поправил длинную арифметику.
Код рабочий. Можно, конечно, элегантнее. Например, с динамическими массивами.

файл phib.cpp
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
#include <iostream>
#include <iomanip>
using namespace std;
 
const int N = 250;  // phi(1000) порядка 1.e209
 
typedef unsigned char byte;
 
void add(byte a[N], byte b[N], byte c[N])
{
    byte    over = 0;
 
    for( int i = N - 1; i >= 0; i--)
    {
        c[i] = a[i] + b[i] + over;
 
        if( c[i] >= 10 )
        {
            over = c[i] / 10;
            c[i] = c[i] % 10;
        }
        else
        {
            over = 0;
        }
    }
}
 
void phib(int n)
{
    byte fib0[N];
    byte fib1[N];
    byte fib2[N];
 
    for( int i = 0; i < N; i++)
    {
        fib0[i] = 0;
        fib1[i] = 0;
        fib2[i] = 0;
    }
 
    fib0[N - 1] = 1;
    fib1[N - 1] = 1;
 
    for( i = 2; i < n; i++ )
    {
        add( fib0, fib1, fib2 );
 
        memmove( fib0, fib1, sizeof(byte)*N );
        memmove( fib1, fib2, sizeof(byte)*N );
    }
 
    i = 0;
    while( fib2[i] == 0 ) i++;
    
    for( ; i < N; i++)
    {
        cout << setw(1) << char('0' + fib2[i]);
    }
    cout << endl;
}
файл main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <iomanip>
using namespace std;
 
void phib(int n);
 
int main()
{
    int n;
 
    cout << "n = ? ";
    cin >> n;
 
    phib( n );
 
        system("pause");
 
    return 0;
}
Результат: phi(1) = phi(2) = 1 => phi(1000) = 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875

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