精选力扣500题 第26题 LeetCode 415. 字符串相加c++ / java 详细题解
Posted 林深时不见鹿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精选力扣500题 第26题 LeetCode 415. 字符串相加c++ / java 详细题解相关的知识,希望对你有一定的参考价值。
1、题目
给定两个字符串形式的非负整数num1
和num2
,计算它们的和。
提示:
num1
和num2
的长度都小于5100
num1
和num2
都只包含数字0-9
num1
和num2
都不包含任何前导零- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
2、思路
(高精度模板题)
-
1、若
t1
表示第一个数当前位数的大小,t2
表示第二个数当前位数的大小,next
表示进位数 -
2、从个位数开始进行相加,使用
t
记录(t1 + t2 + next)
得出的结果,t % 10
为该位数确定好的元素,进行下一个位数操作时,需要t /= 10
3、c++版代码
class Solution {
public:
vector<int> add(vector<int>& A, vector<int>& B) {
vector<int> C;
for (int i = 0, t = 0; i < A.size() || i < B.size() || t; i ++ ) {
if (i < A.size()) t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
return C;
}
string addStrings(string a, string b) {
vector<int> A, B;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i -- ) B.push_back(b[i] - '0');
auto C = add(A, B);
string c;
for (int i = C.size() - 1; i >= 0; i -- ) c += to_string(C[i]);
return c;
}
};
4、java版代码
class Solution {
public String addStrings(String num1, String num2) {
int n = num1.length();
int m = num2.length();
int i = n - 1 , j = m - 1 ;
int c = 0 ;
StringBuilder sb = new StringBuilder();
while (i >= 0 || j >= 0 ) {
int a = i >= 0 ? num1.charAt(i) - '0' : 0 ;
int b = j >= 0 ? num2.charAt(j) - '0' : 0 ;
int sum = a + b + c ;
sb.append(sum % 10) ;
c = sum / 10 ;
i--;
j--;
}
if (c > 0) {
sb.append(c);
}
return sb.reverse().toString();
}
}
5、高精度java模板整理
1、高精度加法
import java.io.*;
import java.math.BigInteger;
class Main {
public static void main(String[] args) throws IOException{
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
String[] s = cin.readLine().split(" ");
BigInteger n = new BigInteger(s[0]);
s = cin.readLine().split(" ");
BigInteger m = new BigInteger(s[0]);
System.out.println(m.add(n));
}
}
2、高精度减法
import java.io.*;
import java.math.BigInteger;
class Main {
public static void main(String[] args) throws IOException{
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
String[] s = cin.readLine().split(" ");
BigInteger n = new BigInteger(s[0]);
s = cin.readLine().split(" ");
BigInteger m = new BigInteger(s[0]);
System.out.println(n.subtract(m));
}
}
3、高精度乘法
import java.io.*;
import java.math.BigInteger;
class Main {
public static void main(String[] args) throws IOException{
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
String[] s = cin.readLine().split(" ");
BigInteger n = new BigInteger(s[0]);
s = cin.readLine().split(" ");
BigInteger m = new BigInteger(s[0]);
System.out.println(n.multiply(m));
}
}
4、高精度除法
import java.io.*;
import java.math.BigInteger;
class Main {
public static void main(String[] args) throws IOException{
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
String[] s = cin.readLine().split(" ");
BigInteger n = new BigInteger(s[0]);
s = cin.readLine().split(" ");
BigInteger m = new BigInteger(s[0]);
System.out.println(n.divide(m));
System.out.println(n.remainder(m));
}
}
原题链接:415. 字符串相加
以上是关于精选力扣500题 第26题 LeetCode 415. 字符串相加c++ / java 详细题解的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第26题 LeetCode 415. 字符串相加c++ / java 详细题解
精选力扣500题 第61题 LeetCode 78. 子集c++/java详细题解
精选力扣500题 第64题 LeetCode 101. 对称二叉树c++/java详细题解
精选力扣500题 第38题 LeetCode 300.长递增子序列c++/java详细题解