Hello I am HERE!
题目描述
There are many difficulties in today's contest, but this is definitely not one of them.
Because I want you to do it, the classic A+B.
输入描述:
First line an Integer N means n test cases.
Next 2N lines representing 2N groups of different Integers.
N<50.
THE LENGTH of every Integer will less than 5000.
All Integers will be greater than 0.
Some cases may have leading zero.
输出描述:
One line for each test cases reprecenting the answer of A+B.
Do not putout leading zero
示例1
输入
1
100000000000000
100000000000000
输出
200000000000000
备注:
You do not have to use FFT.
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
问题分析: 在高精度加法模板题的基础上增加了前导零的处理,其中一种处理前导零的方法是先记录前导零个数,再遍历无前导零部分即可,具体代码如下。
#include <iostream>
#include <vector>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B) // 高精度加法处理
{
if(A.size() < B.size()) return add(B, A);
vector<int> C;
int t = 0;
for(int i = 0; i < A.size(); i ++){
t += A[i];
if(i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
if(t) C.push_back(t);
return C;
}
int main()
{
int n;
cin >> n;
while(n --){
string a, b;
vector<int> A, B;
cin >> a >> b;
int cnt1 = 0, cnt2 = 0;
for(int i = 0; i <= a.size() - 1; ){ // 记录a中的前导零个数
while(a[i] == '0') i ++, cnt1 ++;
break;
}
for(int i = 0; i <= b.size() - 1; ){ // 记录b中的前导零个数
while(b[i] == '0') i ++, cnt2 ++;
break;
}
for(int i = a.size() - 1; i >= cnt1; i --) A.push_back(a[i] - '0');
for(int i = b.size() - 1; i >= cnt2; i --) B.push_back(b[i] - '0');
auto C = add(A, B);
for(int i = C.size() - 1; i >= 0; i --) cout << C[i];
cout << endl;
}
return 0;
}
京公网安备 11010502036488号