LeetCode.989数组形式的整数加法

这段代码实现了一个功能,将两个整数(其中一个以数组形式给出)相加,然后将结果数组反转。首先确定较大的数的位数,然后从后向前逐位相加并处理进位,最后反转结果数组并返回其长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

/**
 * 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值