【两个无穷大的数相加】

两个无穷大的数相加

两个无穷大的数相加,因为int有限,哪怕用long int也不可能够,用string存,用手工算数的方式从右往左一位一位加,满10就进一。这样不管有多长,都能算出结果。

最近在做QT项目,所以用c++写的demo,用别的语言也是一样的,就一个for循环,从个位开始加,一直加到最高位。

举例:12345+234=?
看成:12345+00234
然后分别计算5+4,4+3,3+2,2+0,1+0,有进位就进位。

void MainWindow::on_pushButton_clicked()
{
    
    
    //将页面输入的两个无穷大的数拿出来
    QString edit1 = ui->lineEdit->text();
    QString edit2 = ui->lineEdit_2->text();

    //设置一个字符串拿来显示计算结果,将单个数相加的除去了进位的结果插入到字符串的第0位
    QString showNum ="";
    //用来存储单个数相加的除去了进位的结果
    int oneNum =0;
    //满10进位就置为1,否则就置为0,并且参与单个数相加
    int enter10 =0;
    //较长的字符串的长度
    int bigStrLength =0;
    //两个字符串的长度
    int edit1Length =edit1.length();
    int edit2Length =edit2.length();

    //如果第一个字符串比第二个字符串长,就把第一个字符串的长度存起来,并且在短的字符串的头部补0,补到长度和第一个字符串一样长。相反,就操作第二个字符串。
    if(edit1Length>edit2Length){
    
    
        bigStrLength=edit1Length;
        for (int f=0;f<edit1Length-edit2Length;f++) {
    
    
            edit2.insert(0,"0");
        }
    }else{
    
    
        bigStrLength=edit2Length;
        for (int f=0;f<edit2Length-edit1Length;f++) {
    
    
            edit1.insert(0,"0");
        }
    }

    //循环最长的字符串的长度,从个位数开始计算并且递减,直到循环到最高位,然后结束计算,得出结果。
    for (bigStrLength;bigStrLength>0;bigStrLength--) {
    
    
        //把第一个字符串的最右边的一个数拿出来
        QString u = edit1.mid(bigStrLength-1,1);
        //把第二个字符串的最右边的一个数拿出来
        QString o =edit2.mid(bigStrLength-1,1);
        //两个数相加,并且加上满十进一的进位
        oneNum = u.toUInt() + o.toInt(0) +enter10;
        //如果结果满十,就将进位置为1,否则就置为0
        if(oneNum>9){
    
    
            enter10=1;
        }else {
    
    
            enter10=0;
        }

        //把单个数的计算结果插入字符串的第一位,依次插入,直到计算完两个字符串的最后一位,得出完整的计算结果
        showNum.insert(0,QString::number(oneNum));
    }
    //把结果显示在界面
    ui->textBrowser->setText(showNum);

}

在这里插入图片描述

在这里插入图片描述

如果要限制输入,可以做如下设置,不过设置了之后,就受到IntValidator的限制,长度就不能无限输入了,只能输入int所支持的最大长度。
    QIntValidator  *IntValidator = new QIntValidator(this) ;
    //IntValidator->setRange(0, 255);//可以改成(-255,255),这样只能输入-255,255之间的数
    ui->lineEdit->setValidator(IntValidator);//这样只能输入整数
    ui->lineEdit_2->setValidator(IntValidator);
    ui->lineEdit->setPlaceholderText("请输入整数");//背景提示用户输入范围
    ui->lineEdit_2->setPlaceholderText("请输入整数");//背景提示用户输入范围

猜你喜欢

转载自blog.csdn.net/frank7023/article/details/131476913