#include <iostream>
#include <vector>
#include <algorithm>
struct vv{
int c, num;
};
// Функция для сложения двух больших чисел
std::vector<int> add(const std::vector<int>& num1, const std::vector<int>& num2) {
std::vector<int> result;
int carry = 0;
int i = num1.size() - 1;
int j = num2.size() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) {
sum += num1[i];
i--;
}
if (j >= 0) {
sum += num2[j];
j--;
}
result.push_back(sum % 10);
carry = sum / 10;
}
std::reverse(result.begin(), result.end());
return result;
}
// Функция для вывода большого числа
void printBigNumber(const std::vector<int>& number) {
int cnt = 0;
std::vector<vv> kk;
for (int k = 0; k < number.size(); ++k) {
if (k + 1 < number.size()) {
if (number[k] == number[k + 1]) {
cnt++;
} else {
kk.push_back({cnt+1, number[k]});
cnt = 0;
}
} else {
kk.push_back({cnt+1, number[k]});
}
}
std::cout << kk.size() << std::endl;
for(auto j : kk){
std::cout << j.c << ' ' << j.num <<'\n';
}
}
int main() {
int n;
std::vector<int>num1;
std::vector<int>num2;
std::cin >> n;
for(int i = 0; i < n; ++i){
int q;
int num;
std::cin >> q >> num;
for(int j =0; j < q; ++j){
num1.push_back(num);
}
}
std::cin >> n;
for(int i = 0; i < n; ++i){
int q;
int num;
std::cin >> q >> num;
for(int j =0; j < q; ++j){
num2.push_back(num);
}
}
std::vector<int> sum = add(num1, num2);
printBigNumber(sum);
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
struct vv{
int c, num;
};
// Функция для вывода большого числа
void printBigNumber(const std::vector<int>& number) {
int cnt = 0;
std::vector<vv> kk;
for (int k = 0; k < number.size(); ++k) {
if (k + 1 < number.size()) {
if (number[k] == number[k + 1]) {
cnt++;
} else {
kk.push_back({cnt+1, number[k]});
cnt = 0;
}
} else {
kk.push_back({cnt+1, number[k]});
}
}
std::cout << kk.size() << std::endl;
for(auto j : kk){
std::cout << j.c << ' ' << j.num <<'\n';
}
}
int main() {
int n;
std::vector<int>num1;
std::vector<int>num2;
std::cin >> n;
for(int i = 0; i < n; ++i){
int q;
int num;
std::cin >> q >> num;
for(int j =0; j < q; ++j){
num1.push_back(num);
}
}
std::cin >> n;
for(int i = 0; i < n; ++i){
int q;
int num;
std::cin >> q >> num;
for(int j =0; j < q; ++j){
num2.push_back(num);
}
}
if(num1.size() > num2.size()){
int len = num1.size() - 1;
for(int j = num2.size(); j > -1;j--){
int pr = num1[len]+num2[j];
if(pr > 9) {
int ost = pr%10;
num1[len] = num1[len] + ost;
num1[len - 1]++;
}
else{
num1[j] += pr;
}
len--;
}
}
for(int h = num1.size(); h > -1; h){
if(num1[h] > 9){
num1[h-1]++;
num1[h] = 0;
}
h--;
}
printBigNumber(num1);
return 0;
}
num1.size() <= num2.size()
. Во-вторых, в конце, где вы нормализуете число, если там окажется 11, где-то, то вы оставите в этом разряде 0, а не 1, как надо. Правда, при сумме двух чисел там 11 получится за длиной максимального числа не может появиться, ибо туда может прийти только +1 от переноса. Но код все-равно логически неверен.