/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* addToArrayForm(int* A, int ASize, int k, int* returnSize){
//该题三步走,先将k值和A数组依次从最后取值最后一个值,再相加放入返回的数组,然后将全部返回的数组中的值反转一趟。
int KSize = 0; //得到k值的长度
// 134
int KNum = k;
while(KNum)
{
++KSize;
KNum /= 10;
}
int len = ASize > KSize ? ASize: KSize; //比较A数组和K值,将大的放入len
int* retArr = (int*)malloc(sizeof(int)*(len+1)); //开辟retArr的内存空间,
int Ai = ASize-1; //将A数组的最后一个下标赋给Ai
int reti = 0; //返回数组的下标
int nextNum = 0; //俩数相加的进位
while(len--) //循环len,从后到前
{
//处理依次取Ai值
int a = 0;
if(Ai >= 0)
{
a = A[Ai];
--Ai;
}
//将A数组值和k值从最后依次相加
int ret = a + k%10 +nextNum;
k /= 10;
//判断ret值是否大于9,如果大于将ret减去10,然后十位数放入nextNum中,
if(ret > 9)
{
ret -= 10;
nextNum = 1;
}
else
{
nextNum = 0;
}
//将ret值放入retArr数组中
retArr[reti] = ret;
++reti;
}
//判断俩数最后一位相加是否大于10,大于10则进位有数值,则可直接将数值赋给retArr返回数组
if(nextNum == 1)
{
retArr[reti] = 1;
++reti;
}
//将返回的值反转
int left = 0,right = reti - 1;
while(left < right)
{
int tmp = retArr[left];
retArr[left] = retArr[right];
retArr[right] = tmp;
++left;
--right;
}
//把reti长度赋给returnSize,控制在内存开辟的空间长度,否则,长度不知道在那停
*returnSize = reti;
return retArr;
}