Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: C++ последовательность Фибоначчи  (Прочитано 8354 раз)
0 Пользователей и 1 Гость смотрят эту тему.
сергей2011
Интересующийся

by
Offline Offline

« : 13-02-2012 13:01 » 

задача такова, найти первое число в последовательности, которое состоит из 200 цифр. вроде все хорошо, но есть загвоздочка. в примере кода, который написал смотрю число не на 200, а на 4, так просто проще и быстрее, логика одна, и задача от этого никак не меняется. для хранения БОЛЬШИХ чисел использую массив, складываю ячейки друг с другом, при сложении если результат больше 9, то необходимо прибавить единицу в предыдущих разряд. так вот почему то не прибавляет(((( может кто уидит косяк, подскажите пожалуйста.

Код: (C++)
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int main(void)
{
        //FILE  *u;
        //u = fopen("c:\\output.txt", "w");
        int n=200;
        int f1[5];
        int f2[5];
        int f3[5];
        int t;
        //////////////////////////объявление первого массива
        for(int t=4; t>0; t--)                                          ////   
        {f1[t]=0;}                                                                              ////
        f1[4]=9;                                                                                ////
        for(t=1; t<5; t++)                                                      ////
                cout<<f1[t];                                                            ////
        cout<<" = pervoe chislo"<<endl;                                                                         ////
        ////////////////////////////////////////////////////
       
        for(int t=4; t>0; t--)
        {f2[t]=0;}
        f2[4]=8;
        for(t=1; t<5; t++)
                cout<<f2[t];
        cout<<" = vtoroe chislo"<<endl;
       
        for(int t=4; t>0; t--)
        {f3[t]=0;}
        for(t=1; t<5; t++)
                cout<<f3[t];
        cout<<" = tretee chislo"<<endl;
        //////////////////////////////конец объявления третьего 
       
       
while(f1[1]==0||f2[1]==0||f3[1]==0) /////////количество повторений всей шляпы
{

        //ВОТ ТУТ ПОСМОТРИТЕ, ГДЕ "ПРОВЕРКА НА ПРЕВЫШЕНИЕ ЯЧЕЙКИ" идем справа налево
        /////////сложение///////////////////////////////////////////////////////////////////////
        for(t=4; t>0; t--)                                                                                                                              ////////       
        {                                                                                                                                                               ////////
                f3[t]=f1[t]+f2[t];                                                                                                                      ////////
                if(f3[t]>9)                     ///////////проверка на превышение ячейки////////////////////////таких три одинаковых блока, ни в одном не работает:(
                        {f3[t-1]++;             ////если значение ячейки больше 9, то прибавить единицу к предыдущей ячейке = ВОТ ЭТО НЕ РАБОТАЕТ!!!////////        
                        f3[t]=f3[t]-10;}        //все остальное работает                                                                                                    ////////
        }                                                                                                                                                               ////////
        for(t=1; t<5; t++)                                                                                                                              ////////       
                cout<<f3[t];                                                                                                                            ////////
        cout<<endl;                                                                                                                                             ////////
        if(f3[1]!=0)                                                                                                                                    ////////
        break;
///////////////////////////////////////

        for(t=4; t>0; t--)
        {
                f1[t]=f2[t]+f3[t];
                if(f1[t]>9)                     ///////////проверка на превышение ячейки
                {f1[t-1]++;
                f1[t]=f1[t]-10;}
        }
        for(t=1; t<5; t++)
                cout<<f1[t];
        cout<<endl;
        if(f1[1]!=0)
        break;
        /////////////////////////////////////
        for(t=4; t>0; t--)
        {
                f2[t]=f1[t]+f3[t];
                if(f2[t]>9)                     ///////////проверка на превышение ячейки
                {f2[t-1]++;
                f2[t]=f2[t]-10;}
        }
        for(t=1; t<5; t++)
                cout<<f2[t];
        cout<<endl;
        if(f2[1]!=0)
        break;
        ////////////////////////////
}
        if(f3[1]!=0)
        {for(t=1; t=201; t++)
        cout<<f3[t];}
        cout<<" = iskomoe chislo"<<endl;
       
        if(f2[1]!=0)
        {for(t=1; t=201; t++)
        cout<<f2[t];}
        cout<<" = iskomoe chislo"<<endl;
       
        if(f1[1]!=0)
        {{for(t=1; t=201; t++)
        cout<<f1[t];}
        cout<<" = iskomoe chislo"<<endl;}

        //fclose(u);
        return 0;
}
« Последнее редактирование: 14-02-2012 03:17 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 14-02-2012 03:28 » 

сергей2011,  в такой каше и с таким форматированием работать ничего и не будет. Подсказка: определи и реализуй класс "многоразрядное целое положительное число"

например
Код:
class CVeryLongU
{
   std::vector<BYTE>  m_mantissa;
public:
   //методы работы с числом и его разрядами
  ....
};
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-02-2012 06:19 » 

Да шут бы с ним, с отдельным классом. Тут бы хоть операцию сложения двух длинных чисел, сохранённых в простых массивах, как-то выделить... Каша, да.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 14-02-2012 12:16 » 

О каше я пытался еще сказать в предыдущем посте автора.
Здесь явно прогресс. Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines