高精度整数加法
给定两个正整数(不含前导 0),计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35
c++
#include <iostream>
using namespace std;
const int N = 100010;
int A[N], B[N], C[N];
int cnt ;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
int Add(int a[], int b[], int c[], int cnt)
{
int t = 0;
for (int i = 1; i <= cnt; i++)
{
t += a[i] + b[i];
c[i] = t % 10;
t /= 10;
}
if (t) c[ ++ cnt] = t % 10;
return cnt;
}
int main()
{
IOS;
string a, b;
cin >> a >> b;
int cnt1 = 0;
for (int i = a.size() - 1; i >= 0; i --)
A[++ cnt1] = a[i] - '0';
int cnt2 = 0;
for (int i = b.size() - 1; i >= 0; i --)
B[ ++ cnt2] = b[i] - '0';
int tot = Add(A,B,C, max(cnt1, cnt2));
for (int i = tot; i >= 1; i --)
cout << C[i];
return 0;
}
java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static int A[] = new int[100010];
static int B[] = new int[100010];
static int C[] = new int[100010];
public static int Add( int cnt) {
int t = 0;
for (int i = 1; i <= cnt; i ++)
{
t += A[i] + B[i];
C[i] = t % 10;
t /= 10;
}
if (t!=0) C[++ cnt] = 1;
return cnt;
}
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
String a = scan.next();
String b = scan.next();
int cnt1 = 0, cnt2 = 0;
for (int i = a.length() - 1; i >= 0; i --)
A[++ cnt1] = a.charAt(i) - '0' ;
for (int i = b.length() - 1; i >= 0; i --)
B[++ cnt2] = b.charAt(i) - '0';
int tot = Add(Math.max(cnt1, cnt2));
for (int i = tot; i >=1; i --)
{
System.out.print(C[i]);
}
return ;
}
}