目前计算器已经有大数的加减乘除,如何添加代码实现阶乘和开n次方
部分代码:
mainwindow,h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
public:
QString a1;
QString a2;
int flat_d;
QString num2_dis;
QString num1_dis;
QString sum_dis;
QString oper;
int flat_alg;
private slots:
void on_addit_clicked(); //加法
void on_pushButton_2_clicked(); //清屏
void on_multip_clicked(); //乘法
void on_subt_clicked(); //减法
void on_division_clicked(); //除法
void on_num_clicked(void); //数字按键
void on_SUM_clicked();
void on_factorial_clicked();
void on_delete1_clicked();
void on_minus1_clicked();
public:
int point1(QString str); //判断小数点的位置
int compare_num(QString str1, QString str2); //比较两个字符串数据的大小
QString get_num_point(QString str); //得到数据的小数部分
QString get_num_positive(QString str); //得到数据的整数部分
QString delete_0(QString str1); //删除整数前面的0和小数尾部的零
QString add_pos(QString num1_p, QString num2_p); //数据小数部分加法
QString add_poi(QString num1_d, QString num2_d); //数据整数部分加法
QString add1(QString str1, QString str2); //数据的加法
QString add2(QString str1, QString str2); //带正负号的加法
QString subt2(QString str1, QString str2); //带正负号的减法
QString subt(QString str1, QString str2); //两个数据的减法,str1大于str2
QString sub_int(QString num_b, QString num_s); //整数部分减法
QString sub_point(QString num_b, QString num_s);//小数部分减法
QString mult2(QString str1, QString str2); //带正负号的乘法
QString mult(QString str1, QString str2); //整数乘法
QString factorial(QString str1, QString str2); //阶乘
QString division2(QString str1, QString str2); //除法
QString division3(QString str1, QString str2); //除法
QString division(QString str1, QString str2, int max); //除法
int div1(QString str1, QString str2); //10倍以内除法
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << __func__ << __LINE__ << "构造函数";
flat_d = 0;
flat_alg = 0;
a1.clear();
a2.clear();
num1_dis.clear();
num2_dis.clear();
oper.clear();
connect(ui->pbp, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb0, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb1, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb2, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb3, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb4, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb5, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb6, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb7, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb8, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
connect(ui->pb9, SIGNAL(clicked()), this, SLOT(on_num_clicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_num_clicked(void) //数字事件
{
QPushButton *p = static_cast <QPushButton *> (sender());
ui->lineEdit_2->setText(num2_dis.append(p->text()));
}
void MainWindow::on_minus1_clicked() //负号事件
{
num2_dis = ui->lineEdit_2->text();
if(num2_dis == 0)
num2_dis = "-" + num2_dis;
else if(num2_dis.at(0) != '-')
num2_dis = "-" + num2_dis;
ui->lineEdit_2->setText(num2_dis);
}
void MainWindow::on_addit_clicked() //加法事件
{
if(ui->lineEdit->text() == 0 && ui->lineEdit_2->text() == 0)
{
num1_dis.clear(); num2_dis.clear();
}
else if(ui->lineEdit->text() == 0 && ui->lineEdit_2->text() != 0)
{
num1_dis = ui->lineEdit_2->text();
ui->lineEdit->setText(num1_dis.append("+"));
num2_dis.clear();
ui->lineEdit_2->setText(num2_dis);
}
else if(ui->lineEdit->text() != 0 && ui->lineEdit_2->text() == 0)
{
num1_dis = ui->lineEdit->text();
if(num1_dis.mid(num1_dis.length()-1, 1) == "+")
ui->lineEdit->setText(num1_dis);
else if(num1_dis.mid(num1_dis.length()-1, 1) == "-")\
num1_dis.replace(num1_dis.length()-1, 1, "+");
else if(num1_dis.mid(num1_dis.length()-1, 1) == "×")\
num1_dis.replace(num1_dis.length()-1, 1, "+");
else if(num1_dis.mid(num1_dis.length()-1, 1) == "÷")\
num1_dis.replace(num1_dis.length()-1, 1, "+");
else if(num1_dis.mid(num1_dis.length()-1, 1) == "^")\
num1_dis.replace(num1_dis.length()-1, 1, "+");
else
num1_dis.append("+");
ui->lineEdit->setText(num1_dis);
}
else if(ui->lineEdit->text() != 0 && ui->lineEdit_2->text() != 0)
{
on_SUM_clicked();
num1_dis = ui->lineEdit->text();
num1_dis.append("+");
ui->lineEdit->setText(num1_dis);
num1_dis.clear();
}
}
ui界面
#include <QtMath>
int factorial(int n)
{
if (n == 0) {
return 1;
} else {
return n * factorial(n-1);
}
}
double exp(double x, int n)
{
if (n == 0) {
return 1;
} else if (n < 0) {
return 1 / exp(x, -n);
} else {
return exp(x * x, n / 2) * (x + (n % 2) * 1.0);
}
}
**前提:**已回计算器代码的实现,如若不会请翻到文章最下方先看懂计算器代码实现;