题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加1。最高位数字存放在数组的首位,数组中每个元素只存储一个数字
思路:
首先对最后的一个数字加1,然后判断是否进位,如果一直进位的话,那就最后要对数组进行扩容,增大数组的容量。
代码:
void PrintArr(int* arr, int sz)
{
assert(arr && sz >= 0);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void plusOne(int* arr, int sz)
{
assert(arr && sz >= 0);
int sumNum = 1;
for (int i = sz - 1; i >= 0; i--)
{
int digit = arr[i] + sumNum;
arr[i] = digit % 10;
sumNum = digit / 10;
//如果下一次要加的数字是0的话,则退出不需要在进行进位了
if (sumNum == 0)
{
break;
}
}
if (sumNum != 0)
{
printf("%d ", sumNum);
}
PrintArr(arr, sz);
}