编程:用Qt/C++实现简易的用字符串表示的十进制数加1,用于很大的数累加

代码实现:

/**************************************************************************************************
 * DESCRIPTION: 字符串表示的十进制数加1
 *************************************************************************************************/
void bigNumberIncrease(QString &num)
{
    unsigned char digit = num.size();                           // 统计传入的数的位数
    bool carry = false;                                         // 进位标志

    num.replace(digit-1, 1, num.at(digit-1).toLatin1() + 1);    // 最低位加1

    for (signed char i = digit-2; i >= 0; --i)
    {
        if (num.at(i+1).toLatin1() > '9')                       // 判断i+1位是否大于'9'
        {
            num.replace(i+1, 1, '0');
            num.replace(i, 1, num.at(i).toLatin1() + 1);
            carry = true;
        }
        else
        {
            carry = false;
        }

        if (!carry)                                             // 没有进位,则跳出循环
        {
            break;
        }
    }

    // 如果传入的数所有位都是'9',则回到'1',如"999"→"001"
    if (num.at(0).toLatin1() > '9')
    {
        num.replace(0, 1, '0');
        num.replace(digit-1, 1, '1');
    }
}

1、本函数根据形参num的长度作为数的位数,假设num为"1234567890",则累加的最大值为"9999999999"。

2、replace()是Qt 4.8的QString类里的一个重载函数,在此处的作用是把指定位置的字符A换成字符B,如'1'→'2'。

 

该实现方法是以农夫自个儿不灵光的脑子想出来的,未参考任何方法,难免有不足之处,望读者们不吝赐教。

如有雷同,纯属巧合。


2020年6月5日更新

优化版本:

QString bigNumberIncrease(QString num)
{
    unsigned char length = num.size();
    QByteArray byteArray(num.toLatin1());

    for (signed char i = length-1; i >= 0; --i)
    {
        byteArray[i] = byteArray[i] + 1;
        if (byteArray[i] > '9')
        {
            byteArray[i] = '0';
        }
        else {
            return QString(byteArray);
        }
    }

    byteArray[length-1] = '1';
    return QString(byteArray);
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值