前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode每日一练:数组形式的整数加法

LeetCode每日一练:数组形式的整数加法

作者头像
利刃大大
发布2023-04-12 14:04:10
2130
发布2023-04-12 14:04:10
举报
文章被收录于专栏:编程语言/linux/算法
Alt
Alt

链接: 数组形式的整数加法


思路:(C语言版本) 这道题的难点在于我们不知道两个数最高位是否还需要进位。。。。

但是我们可以确定的一个是最多只能向前进一位!为什么呢?大家想想,比如两个9相加,最高也只是18,只能向前进一位。

  1. 所以我们第一步先求出数组这个数字的长度k的长度,然后取长的那个,创建一个新数组newarr大小为长的那个数字的长度加一
  2. 第二步就是从个位开始,分别分解两个数,然后求和,并且判断是否有进制位,有的话存起来,给下一位相加时候加上去,以此循环,直到两个数都分解完成。
  3. 最后还要判断一下是否还存着一个进制位没有加上去,有的话就给newarr的最高位加一,然后将newarr反转过来(因为我们采取先尾插后反转的方式)。

代码:

代码语言:javascript
复制
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
    int tmp = k;
    int ksize = 0;
    while(tmp)
    {
        ksize++;
        tmp /= 10;
    }
    //求出两个长的那个
    int len = ksize > numSize ? ksize + 1 : numSize + 1;
    //然后创建一个len长度的新数组
    int* newarr = (int*)malloc(sizeof(int)*len);

    //从右往左k的每一位和数组里面的每一位相加
    int ki = 0;
    int ai = numSize - 1;
    int next = 0;//进位
    int sumi = 0;//用于赋给newarr的下标标志
    while(ki < ksize || ai >= 0)
    {
        //分解出num的每一位
        int aval = 0;
        if(ai >= 0)
        {
            aval = num[ai];
        }

        //分解出k的每一位
        int kval = 0;
        if(ki < ksize)
        {
            kval = k % 10;
            k /= 10;
        }

        int sum = kval + aval + next;
        //判断一下是否需要进位
        if(sum > 9)
        {
            sum -= 10;
            next = 1;
        }
        else 
        {
            next = 0;
        }

        //将sumi的数值赋给新数组newarr
        newarr[sumi++] = sum;

        ai--;
        ki++;
    }

    //判断是否还有进位
    if(next == 1)
        newarr[sumi++] = 1;

    //最后逆置新数组newarr
    int begin = 0;
    int end = sumi - 1;
    while(begin < end)
    {
        int tmp = newarr[begin];
        newarr[begin] = newarr[end];
        newarr[end] = tmp;
        ++begin;
        --end;
    }

    //将长度以及数组返回
    *returnSize = sumi;
    return newarr;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档