989. 数组形式的整数加法

链接

对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。

例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:

输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
示例 2:

输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:

输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:

输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000

提示:

1 <= A.length <= 10000
0 <= A[i] <= 9
0 <= K <= 10000
如果 A.length > 1,那么 A[0] != 0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分解求和

确定常数项K的位数,并求出它的长度与numsize做比较,申请一块内存(大的那个+1)两个数相加最多比大的那个多一位数。分解完后让分解出来的各位与数组中对应的位做加法,最后求出对应的值。
在这里插入图片描述

/**
 * 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 kNum=k;
   while(kNum)
   {
       kSize++;
       kNum/=10;
   }
   int len=numSize>kSize ? numSize : kSize;
   int* retArry=(int*)malloc(sizeof(int)*(len+1));//多申请一个因为和可能比原先的多一位
   int i=numSize-1;
   int reti=0,result=0;
   int nextNum=0;
   while(len--)
   {
       //数组长度小于数字长度,赋值0.
       int a=0;
       if(i>=0)
       {
           a=num[i];
       }
       else
       {
           a=0;
       }
       result=a+k%10+nextNum;
       if(result>9)
       {
           result-=10;
           retArry[reti]=result;
           reti++;
           i--;
           k/=10;
           nextNum=1;
       }
       else
       {
           retArry[reti]=result;
           reti++;
           i--;
           k/=10;
           nextNum=0;
       }
   }
   //计算到最后一个数字有可能和大于10
   if(nextNum==1)
   {
       retArry[reti]=1; 
       reti++;
   }
   int left=0,right=reti-1;
   while(left<right)
   {
       int temp;
       temp=retArry[left];
       retArry[left]=retArry[right];
       retArry[right]=temp;
       left++;
       right--;
   }
   *returnSize=reti;
   return retArry;
}

这就是该题的解决方法,当然还有其他的方法欢迎大家的补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值