代码实现:
/**************************************************************************************************
* 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);
}