对于非负数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如:如果X=1231,那么其数组形式为【1,2,3,1】。

给定非负整数X的数组形式A,返回整数X+K的数组形式

例如:输入:A=【1,2,0,0】,K=34

输出:【1,2,3,4】

解释:1200+34=1234

下面我通过代码配合注释

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* addToArrayForm(int* num, int numSize, int k, int* returnSize){//retrunSize为输出型参数
int KSize=0;//计算k是多少位
// while(k)
// {
//     ++KSize;
//     k/=10;//或者k/=10,KSize++
// }但是这样会把k干掉了,找不到K了
int kNum=k;
while(kNum)
{
    ++KSize;
    kNum/=10;
}
int len=KSize>numSize?KSize+1:numSize+1;
int *retArr=(int*)malloc(sizeof(int)*(len+1));//新开的数组比两个其中最大的要大1
int numi=numSize-1;//num[],k,numi就是个位上的值,numi是倒着取得
//统计最后一位的下标,但是那个整数不用控制
int reti=0;//结果数组的下标
int nextNum=0;//表示进位
while(len--)//用len控制循环,长度为多少就走len次,--len走(len-1)次
{
    int a=0;
    if(numi>=0)//表示合法
    {
           a=num[numi];
           numi--;
    }
     int ret=a+k%10+nextNum;
    // int ret=num[numi]+k%10+nextNum;//加出来的结果之后,将它放在retArr中去,有进位把1加上,没进位为0
    // numi--;
    k/=10;
if(ret>9)
     {
         ret-=10;//如果ret=15,此时变为ret=5
         nextNum=1;
     }
     else{
         //ret不需要处理
         nextNum=0;//保证nextNum为0,要不然可能为1
     }
     retArr[reti]=ret;
     reti++;
}
if(nextNum==1)//说明还有一个进位没有处理
{
     retArr[reti]=1;
     reti++;
}
//出来了之后还要逆置一下数组
int left=0,right=reti-1;
while(left<right)
{
    int temp=retArr[left];
    retArr[left]=retArr[right];
    retArr[right]=temp;
    left++;
    right--;
}
*returnSize=reti;
return retArr;
}