栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


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


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

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

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

代码:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号