数组形式的整数加法C语言❤

news2024/11/25 20:54:01

一、题目:

整数的 数组形式   是按照从左到右的顺序表示其数字的数组。num

  • 例如,对于 ,数组形式是 。num = 1321[1,3,2,1]

给定 ,整数的 数组形式 ,和整数 ,返回 整数 num + k 的 数组形式 。numk

示例 1:

输入:num = [1,2,0,0], k = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目链接

二:解题思路

这道题的思路比较简单

第一步:

对于num和k的位数进行比较,防止栈溢出的情况。在题目中,num的数组中元素的个数已经给出,那么自然它的位数就知道了,我们就只对k的位数进行计算。

 int numsizek=0;
    int knum=k;这里可以防止对k进行改变。用kunm来替代它。
    while(knum)
    {
        knum/=10;
        numsizek++;     这里的循环可以计算出位数的多少,如果想不明白的话可以带入相关的数来理解
    }
    int let=numSize>numsizek ? numSize:numsizek;这个就可以把相对大的值给let
    int *retArr=(int*)malloc(sizeof(int)*(let+1));  例如999+11它的位数就有可能比最大的那个大, 
                                                     最多大一位所以我们开辟空间时,就要多开辟一 
                                                                  个。

第二步

就是相加起来。

我们可以一位一位的加,个位加个位,十位加十位,百位加百位等等

    int Ai=numSize-1; 这个是num数组的最后一个元素。
    int reti=0;       这个是我们自己开辟空间的数组元素下标。
    int numDigit=0;   这个是如果位数相加大于10后它变成一,来加到下一位上。
    while(let--)      这个可以循环最大位数。
    {   int a=0;
        if(Ai>=0)
        {
            a=num[Ai];    这个1就是为了防止num中元素的个数小于k的位数的判断。
            Ai--;         即使不成立了,下面的a=0也毫无影响。
        }
        int ret=a+k%10+numDigit;  k%10是找到它的最后一位数。
        k/=10;                    依次去掉后面的数,来找k每个位置上的数。
        if(ret>9)
        {
            ret-=10;         这个判断作用是相应的位数是否大于10,大于10就要进一位,然后本位还要
            numDigit=1;      减10;
        }
        else
        numDigit=0;
        retArr[reti]=ret;
        reti++;
    }
    if(numDigit==1)
    {
        retArr[reti]=1;       因为当numDigit为1时需要返回才能加,所以当最后一位数相加时,如果 
                              超过了本位数,则无法加到下一位,所以我们需要在后面再下一个判断条 
                              件,来确定需不需要进一位
        ++ reti;
    }

第三步 :

我们所写的代码是反着的

例如:110+990=1100,我们需要的是1100

但是我们的代码是0011

所以我们需要将这个数组给倒转过来。

 int left=0;
    int right=reti-1;

    while(left<right)
    {
        int rum=0;
        rum=retArr[left];
        retArr[left]=retArr[right];
        retArr[right]=rum;
        left++;
        right--;
    }

这样就大功告成了。 

三:完整代码

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* addToArrayForm(int* num, int numSize, int k, int* returnSize) {
    int numsizek=0;
    int knum=k;
    while(knum)
    {
        knum/=10;
        numsizek++;
    }
    int let=numSize>numsizek ? numSize:numsizek;
    int *retArr=(int*)malloc(sizeof(int)*(let+1));
    int Ai=numSize-1;
    int reti=0;
    int numDigit=0;
    while(let--)
    {   int a=0;
        if(Ai>=0)
        {
            a=num[Ai];
            Ai--;
        }
        int ret=a+k%10+numDigit;
        k/=10;
        if(ret>9)
        {
            ret-=10;
            numDigit=1;
        }
        else
        numDigit=0;
        retArr[reti]=ret;
        reti++;
    }
    if(numDigit==1)
    {
        retArr[reti]=1;
        ++ reti;
    }
    int left=0;
    int right=reti-1;

    while(left<right)
    {
        int rum=0;
        rum=retArr[left];
        retArr[left]=retArr[right];
        retArr[right]=rum;
        left++;
        right--;
    }
    *returnSize=reti;
    return retArr;
}

虽然思路很简单,但是比较考察同学们的细心程度,是一道很经典的题,希望看官们能有所收获!

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1343042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

猫咪吃哪种冻干最好?推荐新手养猫五款口碑最好主食冻干猫粮牌子

现在越来越多的铲屎官关注猫咪的食品选择&#xff0c;而冻干猫粮一直是热门话题。其中主食冻干的肉含量很高&#xff0c;富含猫咪成长所需的蛋白质、维生素等营养物质。而且冻干工艺还保留了食材的原始风味&#xff0c;复水后可以恢复鲜肉的口感&#xff0c;猫咪很喜欢吃&#…

用于IT管理的COBIT

随着世界的不断发展和变化&#xff0c;企业必须像冲浪者一样乘风破浪&#xff0c;适应社会不断更新的浪潮&#xff0c;拥抱新技术。信息技术&#xff08;IT&#xff09;已成为大多数企业运营的支柱&#xff0c;对战略决策、客户互动和整体效率都起了一定的影响作用。然而&#…

《Spring Cloud学习笔记:分布式事务Seata》

1.分布式事务理论基础 1.1.本地事务 本地事务&#xff0c;也就是传统的单机事务&#xff0c;在传统的数据库事务中&#xff0c;必须要满足ACID四个原则&#xff1a; 1.2.分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下产生的事务。 分布式事务是…

polar CTF上传

WEB-上传 一、查看题目信息 二、漏洞分析 经过上传测试发现&#xff0c;这题过滤掉了<?&#xff0c;这样正常的一句话木马就没法上传&#xff0c;这里可以用utf-16编码绕过。因为utf-16占utf-8的两倍长度&#xff0c;上传时默认检测为utf-8,从而就能绕过检测成功上传。 同…

BOM和DOM有什么区别和联系

BOM (Browser Object Model) 和 DOM (Document Object Model) 都是与 Web 开发相关的术语&#xff0c;它们分别代表了浏览器对象模型和文档对象模型。 BOM 是浏览器对象模型的缩写&#xff0c;它提供了一组用于操作浏览器窗口、浏览器历史记录、浏览器的位置等浏览器相关对象的…

C语言中关于while语句的理解以及getchar和putchar

while是一个循环语句&#xff0c;关于while的一些理解可以看下面这串代码 #include <stdio.h> int main() {int i 0;scanf("%d", &i);printf("输入十以内的数字&#xff0c;从输入的数字开始一直数到十&#xff1a;");while (i<10){printf(…

05-C++ 类和对象-继承

类与对象-03 继承与派生 1. 继承的概念 c最重要的特征是代码重用&#xff0c;通过继承机制可以利用已有的数据类型&#xff0c;来定义新的数据类型&#xff0c;新的类不仅拥有旧类的成员&#xff0c;还拥有新定义的成员。 一个 B 类继承于 A 类&#xff0c;或称从类 A 派生…

【操作系统】不同操作系统内核架构分析

一、内核架构与操作系统性能之间的关系的分析 1. 适用性和专业化&#xff1a; 不同的内核架构往往会有不同的设计目标和优化点。例如&#xff0c;实时操作系统&#xff08;RTOS&#xff09;和通用操作系统&#xff08;像Linux或Windows&#xff09;在设计时就有不同的重点&am…

数据结构--二叉搜索树的实现

目录 1.二叉搜索树的概念 2.二叉搜索树的操作 二叉搜索树的插入 中序遍历(常用于排序) 二叉搜索树的查找 二叉搜索树的删除 完整二叉树代码&#xff1a; 二叉搜索树的应用 key/value搜索模型整体代码 1.二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一…

【第十三课】Trie字符串统计(acwing-835 / 二维数组的含义 / c++代码)

思想 Trie树在我们之前学习树的时候简单提过一嘴。 Trie树也称为前缀树或字典树&#xff0c;是一种用于高效存储和查找字符串的数据结构。Trie树的主要思想是利用字符串之间的公共前缀来节省存储空间&#xff0c;提高查询效率。 节点表示&#xff1a;Trie树中的每个节点代表一…

[Angular] 笔记 16:模板驱动表单 - 选择框与选项

油管视频&#xff1a; Select & Option (Template Driven Forms) Select & Option 在 pokemon.ts 中新增 interface: export interface Pokemon {id: number;name: string;type: string;isCool: boolean;isStylish: boolean;acceptTerms: boolean; }// new interface…

JavaScript(简写js)常用事件举例演示

目录 1.窗口事件onblur :失去焦点onfocus:获得焦点onload:窗口加载事件onresize:窗口大小缩放事件 二、表单事件oninput &#xff1a;当文本框内容改变时 &#xff0c;立即将改变内容 输出在控制台onchange&#xff1a; 内容改变事件onclick&#xff1a;鼠标单击时触发此事件 三…

OR-NeRF论文笔记

OR-NeRF论文笔记 文章目录 OR-NeRF论文笔记论文概述Abstract1 Introduction2 Related Work3 Background4 Method4.1 Multiview Segmentation4.2 Scene Object Removal 5 ExperimentsDatasetsMetricsMultiview SegmentationScene Object Removal 6 Conclusion 论文概述 目的&am…

resnet18

ResNet18的基本含义是&#xff0c;网络的基本架构是ResNet&#xff0c;网络的深度是18层。但是这里的网络深度指的是网络的权重层&#xff0c;也就是包括池化&#xff0c;激活&#xff0c;线性层。而不包括批量化归一层&#xff0c;池化层。 transforms.RandomCrop(32, pa…

悔不该用中文作为Windows的用户名啊~

前言 汉字在中华文明已经有了几千年的历史&#xff0c;小伙伴们所使用名字更是伴随了自己一生。所以小白们在拿到自己的新电脑&#xff0c;总会想着把自己的中文名字设置为电脑的用户名&#xff0c;这样更能显示出那是自己的专属电脑&#xff01; 一开始小白也是这么想的&…

Unity中Shader裁剪空间推导(在Shader中使用)

文章目录 前言一、在Shader中使用转化矩阵1、在顶点着色器中定义转化矩阵2、用 UNITY_NEAR_CLIP_VALUE 区分平台矩阵3、定义一个枚举用于区分当前是处于什么相机 二、我们在DirectX平台下&#xff0c;看看效果1、正交相机下2、透视相机下3、最终代码 前言 在上一篇文章中&…

迁移Ubuntu报错问题

问题描述&#xff1a; 使用LxRunOffline-v3.5.0-mingw迁移Ubuntu至非系统盘时&#xff0c;出现如下报错 ‘Couldn’t set the case sensitive attribute of the directory “\?\C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\Loc…

基于策略模式和简单工厂模式实现zip、tar、rar、7z四种压缩文件格式的解压

推荐语 这篇技术文章深入探讨了基于策略模式和简单工厂模式实现四种常见压缩文件格式的解压方法。通过阅读该文章&#xff0c;你将了解到如何利用这两种设计模式来实现灵活、可扩展的解压功能&#xff0c;同时适应不同的压缩文件格式。如果你对设计模式和文件处理感兴趣或刚好…

【ES】es介绍,使用spring-boot-starter-data-elasticsearch整合的ES来进行操作Es

文章目录 倒排索引&#xff08;Inverted Index&#xff09;和正排索引&#xff08;Forward Index&#xff09;es和MySQL对比IK分词器的总结mapping映射使用springboot整合的ES来进行操作Es1. 实体类中添加注解2. 编写Repository层3. 通过Repository进行增删改查 倒排索引&#…

学习Vue的key作用和原理

今天主要学习了列表渲染和key的作用和原理&#xff0c;先来说说列表渲染&#xff0c;顾名思义想要渲染列表最快的方式就是使用for循环&#xff0c;我们要学习的就是Vue中对标签实现for循环的语法&#xff0c;它和我们传统的js语法有些不同&#xff0c;它是先要有Vue实例中data的…