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

фибоначчи( функции,массивы) - C++

Восстановить пароль Регистрация
 
syrga
5 / 5 / 2
Регистрация: 04.12.2010
Сообщений: 65
13.01.2012, 10:04     фибоначчи( функции,массивы) #1
написать программу вычисляющую 100-ое число фибоначчи. 2 варианта:используя функцию и используя массив....

Добавлено через 48 минут
он не правильно находит 100 позицию....Что делать????:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <stdio.h>
using namespace std;
double fib(int n) {
    double f1, f2, fn;
    int i;
    f1 = 1; f2 = 1;
    if (n == 0) return 0;
    else if ((n == 1) || (n == 2)) return 1;
    else for(i = 3; i <= n; ++i) {
        fn = f1 + f2;
        f1 = f2;
        f2 = fn;
    }
    return fn;
}
int main() {
    int n;
    cout << " n pozicii: ";
    cin >> n;
    printf(" %d -oe chislo fib %f\n", n, fib(n));
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
brainfrog
 Аватар для brainfrog
4 / 4 / 0
Регистрация: 07.11.2011
Сообщений: 6
13.01.2012, 11:00     фибоначчи( функции,массивы) #2
По-моему вычисляет правильно, выводит неправильно. Попробуйте сделать вывод так:
C++
1
2
3
#include <iomanip> // для setprecision
//...
cout << n << "-oe chislo fib = " << setprecision(30) << fib(n) << endl;
syrga
5 / 5 / 2
Регистрация: 04.12.2010
Сообщений: 65
13.01.2012, 11:32  [ТС]     фибоначчи( функции,массивы) #3
Цитата Сообщение от brainfrog Посмотреть сообщение
setprecision(30)
а что это значит?

Добавлено через 8 минут
всё равно не работает(((
табаков
1 / 1 / 0
Регистрация: 13.01.2012
Сообщений: 25
13.01.2012, 11:38     фибоначчи( функции,массивы) #4
setprecision
setw

используются при табуляции
setprecision помоему знаков после запятой обозначает
syrga
5 / 5 / 2
Регистрация: 04.12.2010
Сообщений: 65
13.01.2012, 12:06  [ТС]     фибоначчи( функции,массивы) #5
выводится: fib=354224848179262000000

как сделать так чтобы было без нулей????
golatin
259 / 216 / 38
Регистрация: 12.10.2011
Сообщений: 311
Завершенные тесты: 1
13.01.2012, 12:12     фибоначчи( функции,массивы) #6
Проблема скорее всего в double
из MSDN
тип: double
размер: ±5.0 × 10−324 to ±1.7 × 10308
точность: 15-16 digits

Твоя программа неправильно начинает считать уже с 79 числа вместо 14472334024676221 выдает 14472334024676220

long long int тоже не подходит: предел 92-oe число 7540113804746346429

Вводи длинную арифметику 100 число 354224848179261915075 (21 цифра) - очень большое
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.01.2012, 12:59     фибоначчи( функции,массивы) #7
Да, эта задача нерешаема через стандартные типы. Только через длинную арифметику.
syrga
5 / 5 / 2
Регистрация: 04.12.2010
Сообщений: 65
16.01.2012, 13:11  [ТС]     фибоначчи( функции,массивы) #8
так значит её никак не решить???
помогите...
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.01.2012, 13:15     фибоначчи( функции,массивы) #9
Посмотрите, вот вариант по проще http://gmplib.org/#FUNCCLASSES
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2012, 13:24     фибоначчи( функции,массивы)
Еще ссылки по теме:

C++ рекурсия и массивы: числа Фибоначчи
Массивы, функции C++
Рекурсия, ряд Фибоначчи (определить количество рекурсивных вызовов функции) C++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.01.2012, 13:24     фибоначчи( функции,массивы) #10
Либо так.
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <vector>
#include <cmath>
#include <sstream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <cstdio>
 
class BigInteger
{
        std::vector<int> value;
        static const int base = 1e9;
        static const int count_of_digits = 9;
        
public:
 
        BigInteger() { value.push_back(0); }   
        BigInteger( const std::string& );
        BigInteger( long long );
        BigInteger& operator = ( long long );
        
        BigInteger& operator += ( const BigInteger& );
        
        friend BigInteger operator + ( const BigInteger&, const BigInteger& );
        
        friend std::istream& operator >> ( std::istream&, BigInteger& );
        friend std::ostream& operator << ( std::ostream&, const BigInteger& );
};
 
#define double BigInteger
 
double fib(int n) {
        double f1, f2, fn;
        int i;
        f1 = 1; f2 = 1;
        if (n == 0) return 0;
        else if ((n == 1) || (n == 2)) return 1;
        else for(i = 3; i <= n; ++i) {
                fn = f1 + f2;
                f1 = f2;
                f2 = fn;
        }
        return fn;
}
 
#undef double
 
int main() {
        int n;
        std::cout << "n pozicii: ";
        std::cin >> n;
        std::cout << n << " - oe chislo fib " << fib(n) << std::endl;
}
 
BigInteger& BigInteger::operator = ( long long n )
{
    this->value = BigInteger(n).value;
    return *this;
}
 
BigInteger::BigInteger( const std::string& str )
{
        for (int i = str.length() ; i > 0 ; i -= count_of_digits)
        {
                if ( i < count_of_digits )
                {
                        value.push_back( atoi( str.substr(0, i).c_str() ) );
                }
                else
                {
                        value.push_back( atoi( str.substr(i - count_of_digits, count_of_digits).c_str() ) );
                }
        }
}
 
BigInteger::BigInteger( long long x )
{
        std::ostringstream ost;
        ost << x;
        std::string str = ost.str();
        
        for (int i = str.length() ; i > 0 ; i -= count_of_digits)
        {
                if ( i < count_of_digits )
                {
                        value.push_back( atoi( str.substr(0, i).c_str() ) );
                }
                else
                {
                        value.push_back( atoi( str.substr(i - count_of_digits, count_of_digits).c_str() ) );
                }
        }
        
}
 
BigInteger& BigInteger::operator += ( const BigInteger& b )
{
        for ( int temp = 0, i = 0; i < (int) std::max( this->value.size(), b.value.size() ) || temp != 0 ; ++i)
        {
                if ( i == (int) value.size() )
                        value.push_back( 0 );
                
                value[i] += temp + ( i < (int) b.value.size() ? b.value[i] : 0 );
                temp = value[i] >= base;
                
                if ( temp != 0 )
                        value[i] -= base;
        }
        
        return *this;
}
 
BigInteger operator + ( const BigInteger& a, const BigInteger& b )
{
        BigInteger c = a;
        c += b;
        return c;
}
 
std::istream& operator >> ( std::istream& stream, BigInteger& big )
{
        std::string str;
        std::cin >> str;
        big = BigInteger(str);
        
        return stream;  
}
 
std::ostream& operator << ( std::ostream& stream, const BigInteger& big )
{
        if ( big.value.empty() )
                stream << 0;
        else
                stream << big.value.back();
                
        for (int i = (int) big.value.size() - 2; i >= 0; --i)
        {
                stream << std::setfill('0') << std::setw(BigInteger::count_of_digits) << big.value[i];
        }
        
        return stream;
}
Вашу функцию оставил неизменной.
Yandex
Объявления
16.01.2012, 13:24     фибоначчи( функции,массивы)
Ответ Создать тему
Опции темы

Текущее время: 02:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru