Russian Qt Forum
Март 28, 2024, 23:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нахождение цифры № n в непрерывной последовательности цифр чисел Фибоначчи  (Прочитано 1445 раз)
alexu007
Чайник
*
Offline Offline

Сообщений: 57


Просмотр профиля
« : Май 02, 2022, 08:49 »

Находит цифру и визуально показывает его в последовательности:

Код:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

public slots:
    void press_pbtn_01();

};
#endif // WIDGET_H

Код:
#include "widget.h"
#include "ui_widget.h"



Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QObject::connect(ui->pbtn_01, SIGNAL(clicked()), this, SLOT(press_pbtn_01()));
}



Widget::~Widget()
{
    delete ui;
}



// количество цифр в числе
int len_digit(quint64 x)
{
    int cx = 0;
    while(x > 0)
    {
        cx++;
        x /= 10;
    }

return cx;
}





void Widget::press_pbtn_01()
{
    QString str, s1, s2;
    quint64 fib0, fib1;
    quint32 i, k, cx, cf;

    QString strinp = ui->lineEdit_01->text();
    quint32 inp = strinp.toInt();

    ui->lineEdit_02->clear();

    ui->label_01->clear();
    ui->label_02->clear();

    if((!inp) || (inp > 929)) return;

    fib0 = 0;
    fib1 = 1;
    cx = 1;
    cf = 0;

    while(cx < inp)
    {
        fib0 = fib0 + fib1;
        fib1 = fib0 - fib1;

        cx += len_digit(fib1);
        cf++;
        str += QString::number(fib1);
    }

    k = len_digit(fib1);
    str.remove(str.length() - k, k);

    if(inp == 1)
    {
        cf = 1;
        fib1 = 0;
    }

    fib0 = fib1;
    s1 = QString::number(fib0);

    for(i = 0; i < cx - inp; i++)
    {
        fib1 /= 10;
    }

    for(i = 0; i < k; i++)
    {
        quint32 m = k - (cx - inp) - 1;

        if(i == m) s2 += "_";
        s2 += s1.at(i);
        if(i == m) s2 += "_";
    }

    ui->lineEdit_02->setText(str + s2);

    str = QString::number(cf);

    ui->label_01->setText(QString::number(fib1 % 10));
    ui->label_02->setText(str + "   " + QString::number(fib0));

}


« Последнее редактирование: Май 02, 2022, 10:59 от alexu007 » Записан
qtkoder777
Частый гость
***
Offline Offline

Сообщений: 245


Просмотр профиля
« Ответ #1 : Май 02, 2022, 22:10 »

Найти эту цифру, НЕ СЧИТАЯ сами числа Фибоначчи было бы интересно. А то они, суки, быстро растут, даже 1000-ю цифру лобовым методом найти не удаётся. Интересно сможет ли это сделать ИИ.
Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #2 : Май 02, 2022, 22:36 »

Лучше не сравнивать напрямую знаковые и беззнаковые числа. Иначе бывают весьма занятные баги.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.