数组形式的整数加法

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

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

  1. 解题思路:此题是用一个数的数组形式 + 一个整数, 返回和的数组形式。 模拟加法进行逐位相加,
    从低位向高位相加,最后整体逆置,得到最终结果
    每一位的值 = 对应位值的和 + 前一位的进位
    每一位的值计算出来之后,需要检查是否需要进位
    最高位计算之后,需要考虑是否还需要向上进位
void reverse(int* nums, int begin, int end)
{
  while(begin < end)
  {
    int tmp = nums[begin];
    nums[begin] = nums[end];
    nums[end] = tmp;

    ++begin;
    --end;
  }
}

// 本题需要特别注意对[9,9,9,7] + 5的等特殊情况的处理
int* addToArrayForm(int* A, int ASize, int K, int* returnSize){
  int* addRet = (int*)malloc(10001*sizeof(int));
  //reti: 第i位的结果
  int reti = 0;
  //从低位开始相加
  int ai = ASize-1;
  int next = 0; // 进位值
  while(ai >= 0 || K > 0)
  {
     
    int x1 = 0;
    //如果ai没有越界,还有未相加的位,取出一位存入x1
    if(ai >= 0)
    {
      x1 = A[ai];
      --ai;
    }

    int x2 = 0;
    //如果k大于0,获取k的第i位
    if(K > 0)
    {
      x2 = K%10;
      K /= 10;
    }
    //第i位的结果:每一位的值 + 进位
    int ret = x1+x2+next;
    //如果结果大于9,需要进位
    if(ret > 9)
    {
      ret %= 10;
      next = 1;
    }
    else
    {
      next = 0;
    }
    //存入第i位的结果到数组中
    addRet[reti++] = ret;
  }
  //如果最高位有进位,需要在存入1
  if(next == 1)
  {
    addRet[reti++] = 1;
  }	
  //逆置结果
  reverse(addRet, 0, reti-1);
  *returnSize = reti;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值