题目:大数加法
描述:以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)
示例1:输入:"1","99",返回值:"100",说明:1+99=100
解法一:
思路分析:首先通读题目,我们应该主要理解的是以字符串的形式读入数字,因为两个整数的相加可能会引发溢出的问题,所以用字符串的格式存储字符串s和t,同时判断字符串的长度,设置一个最大值maxlen表示可能的最大长度为多少,最终通过Ascil值的判断,不断相加,确定各位和进位之间的关系。
具体实例分析:输入:"1","99"
| 数字 |
| “1” | “99” |
| 首先设置slen和tlen表示具体长度,maxlen表示最大长度,设置连续的存储空间 | |||
| 个位上的判断 | 1 + 9 = 10,有进位,所以个位对10取余为0 | ||
| 十位上的判断 | 进位1 + 9 = 10,有进位,该位数字为0 | ||
| 百位 | 进位为1 | ||
| 最后的返回值为“100” | |||
具体C语言代码如下所示:
/**
*代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
char* solve(char* s, char* t ) {
//strlen字符串的长度
int slen = strlen(s);
int tlen = strlen(t);
int maxlen = slen > tlen ? slen + 1: tlen + 1; //判断s和t哪个最长
char* res = (char *)calloc(maxlen + 1, sizeof(char));
//calloc()分配所需的内存空间,并返回一个指向它的指针
int i = 0,j = 0,k = 0;
int temp = 0;
for(i = slen - 1,j = tlen - 1,k = maxlen-1;k >= 0;i--,j--,k--){
int stemp = 0;
if(i >= 0){
//for循环判断出所有的字符,然后利用s[]-'0'算出他们的差值
stemp = s[i] - '0';
}
int sstemp = 0;
if(j >= 0){
sstemp = t[j] - '0';
}
temp += stemp + sstemp;
res[k] = temp % 10 + '0';
temp = temp / 10; //满十进一位
}
if(*res == '0'){
return ++res;
}
return res;
}
因为只循环执行一次,故时间复杂度为O(N),空间复杂度为O(N)。
解法二:
思路分析:我们可以直接使用java中的大数操作BigInteger,直接进行大数之间的运算,可以直接得到最终的结果。
资料显示:java中可以使用BigInteger操作大整数,也可以转换进制。如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作。这些大数都会以字符串的形式传入。
其具体java代码如下所示:
import java.util.*;
import java.math.*;
public class Solution {
/**
*代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
BigInteger biginteger1 = new BigInteger(s);
BigInteger biginteger2 = new BigInteger(t);
return biginteger1.add(biginteger2).toString();
}
}
同时也可以使用python直接进行输出:
# #代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 #计算两个数之和 # @param s string字符串 表示第一个整数 # @param t string字符串 表示第二个整数 # @return string字符串 # class Solution: def solve(self , s , t ): # write code here return int(s) + int(t);
因为是直接调用的函数,所以其时间复杂度与空间复杂度均为O(1)。

京公网安备 11010502036488号