若有 不理解的地方结合注释走读代码 会有利于理解
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
int ksize=0;
int m=k;
while(m)
{
++ksize;
m/=10;
}// 获取k的位数
int len=numSize>ksize?numSize+1:ksize+1;//估计的结果的最长位数 两数相加最多进一位
int *array=(int*)malloc(sizeof(int)*len);//根据所需开辟空间 即返回的地址
int Ai=numSize-1;
int ki=0;
int next=0;
int count=0;//实际结果的位数
while(Ai>=0||ki<ksize)//只要两个数中有一个数的位数不为零就继续进行循环
{
int avalu=0;
if(Ai>=0)
avalu=num[Ai--];
int kvalu=k%10;
k/=10;
int sum=avalu+kvalu+next;//进位next要加进去 这样可以让下一位的数加上前一次的进位
if(sum>=10)
{
next=1;
}
else
{
next=0;
}
array[count++]=sum%10;//这里是二者最低位计算的结果存进开辟空间的第一个位置 后边要对其进行逆置
ki++;
}
if(next==1)
array[count++]=1;//判断最高位数的地方是否有进位 有进位就是1 设的实际结果的位数count要加加
int begin=0,over=count-1;
while(begin<over)
{
int tmp=array[begin];
array[begin]=array[over];
array[over]=tmp;
begin++,over--;
}
*returnSize=count;
return array;
}