思路一:数组转数字,数字加一,数字转数组。但是存在一个问题,如果数组非常大,数字无法承载
string numStr = "";
for (int i = 0; i < digits.Length; i++)
{
numStr += digits[i].ToString();
}
ulong numLong = Convert.ToUInt64(numStr);
numLong = numLong + 1;
numStr = numLong.ToString();
char[] numChar = numStr.ToArray();
int[] numInt = new int[numChar.Length];
for (int i = 0; i < numChar.Length; i++)
{
numInt[i] = Convert.ToInt32(numChar[i].ToString());
}
return numInt;
思路二:从最后一个数字开始判断,如果是9,就进位,不是9就返回
if (digits[digits.Length - 1] == 9)
{
digits[digits.Length - 1] = 0;
bool add = true;
for (int i = digits.Length - 2; i >= 0; i--)
{
if (digits[i] == 9 && add == true)
{
add = true;
digits[i] = 0;
}
else if (add == true)
{
add = false;
digits[i]++;
}
}
if (digits[0] == 0)
{
int[] nusInt = new int[digits.Length + 1];
nusInt[0] = 1;
for (int i = 0; i < digits.Length; i++)
{
nusInt[i + 1] = 0;
}
return nusInt;
}
else
{
return digits;
}
}
else
{
digits[digits.Length - 1] = digits[digits.Length - 1] + 1;
return digits;
}
思路3:如果数字是9,就进位变成0,如果不是9,就加一并且返回,因为不会往前进位了。相当于思路2的升级版、简洁版
for (int i = digits.Length - 1; i >= 0; i--)
{
if (digits[i] != 9)//无需进位,那么直接加1然后返回即可
{
digits[i]++;
return digits;
}
else
{
digits[i] = 0;
}
}
//如果能运行到此处,说明每一位都是0,那么新来一个数组然后把第一位为1即可
int[] numsInt = new int[digits.Length + 1];
numsInt[0] = 1;
//其余不用管,都会是默认数值0
return numsInt;