龙空技术网

LeetCode基础算法题第177篇:数字字符串加法

吾是我师 284

前言:

现在小伙伴们对“c语言字符相加”可能比较重视,同学们都想要分析一些“c语言字符相加”的相关内容。那么小编同时在网络上搜集了一些关于“c语言字符相加””的相关知识,希望看官们能喜欢,各位老铁们一起来了解一下吧!



技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

如果有任何问题可以在文章后评论或者私信给我。

如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。

持续分享,敬请关注。



LeetCode 415. 数字字符串加法(Add Strings)问题描述:

给定两个整数的字符串形式num1和num2, 返回 num1+num2的结果的字符串形式。

注:

num1和num2的长度都小于5100;num1和num2只包含数字0-9;num1和num2不包含任何前导零;不使用任何内置的BigInteger库不要将输入直接转换为整数;C语言实现:

这个问题很简单。

传统的解决思路是用ASCII码。说实话我也没什么太好的办法。

首先定义一个字符数组res用来保存结果,长度是strlen(num1)+2,因为strlen的返回值是不包括'\0'的,但是我们要考虑,此外因为加法存在进位问题,比如9+1=10,即结果可能比num1或num2多一位。

定义整型变量carry用来保存加的过程中某一步的进位值,没有进位的化,它的值是0,否则是1。

我们从右向左同时遍历num1和num2:

同一位相加再加上carry,注意因为是字符,所以结果还要与字符'0'取余,这样得到的结果我们记为s,s就是这一位相加的整数结果。但是我们在res中保存的同然是数值字符,所以我们要对s做进一步处理:

s%10就是加后的除去进位后,这一位留下的数字,我们要将其转化成字符,仅仅需要再加上'0'即可。s/10就是是否进位的结果,如果s大于等于10,说明有进位,那么结果就是1,否则是0。将其保存到carry中,我们知道下一位的计算中会用到。

如此下去,直到遍历结束。

如果这个时候carry的值为0,说明num1加num2的结果得到的数字长度和num1或num2一致,那么到这里计算结束了,由于我们申请res的长度,多申请了一位,那么返回结果应该是res+1。

如果这个时候carry的值为1,说明最后有进位,需要将res[0]赋值为'1',然后返回res。

最后代码如下:

Java语言实现:

Java 的实现和C语言的实现一致,不再撰述。

代码如下:

Python语言实现:

Python 的实现思路和C语言的基本一致,不再撰述。

代码如下:

标签: #c语言字符相加 #c语言字符相加减 #c语言字符加法 #c字符串加法 #字符串加法c实现