Находит цифру и визуально показывает его в последовательности:
#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));
}