加一

 

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字

你可以假设除了整数 0 之外,这个整数不会以零开头

int* plusOne(int* digits, int digitsSize, int* returnSize)
{
    int* p = (int*)calloc(digitsSize + 1, sizeof(int));
    int flag = 0;
    *returnSize = digitsSize;
    for (int i = 0; i < digitsSize;i++ )
    {
        p[i] = digits[i];
    }
    if (p[digitsSize - 1] == 9)
        flag = 1;
    for (int j = digitsSize - 1; j >= 0; j--)
    {
        if (p[j] == 9 && flag == 1)
        {
            p[j] = 0;
            flag = 1;
        }
        else if (p[j] != 9 && flag == 1)
        {
            p[j] = p[j] + 1;
            flag = 0;
        }
        else if(p[j]!=9&&j==digitsSize-1)
        {
            p[j]=p[j]+1;
            flag=0;
        }
        else
        {
            flag = 0;
        }
    }
    if (p[0] == 0)
    {
        for (int k = digitsSize; k < 0; k--)
        {
            p[k] = p[k - 1];
        }
        p[0] = 1;
        *returnSize = digitsSize + 1;
    }
    return p;
}
要实现加一首先想到的应该是边界条件的判断,如果末位为9那加一之后就要进位,如果都是9,返回数组的位数要比原来多1,因此用calloc动态内存分配的时候多申请一位,防止数组下标越界。之后设计程序加一