/
alzoi
/
online-courses
Обзор
Документация
Войти
/
alzoi
/
online-courses
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
cpp/task/longar.cpp
55 строк
1 KB
alzoi
Create longar.cpp
18 май 2020, 17:14
Не верифицирован
18 май 2020, 17:14
24d9524
Код
Авторство
О чём код?
// Длинная арифметика - сложение длинных чисел. #include <iostream> #include <string> #include <vector> #include <algorithm> int main() { std::string num1, num2, str; std::vector<int> vnum1, vnum2; int carr, i, base, BASE = 1000000000; // Получаем числа. std::cin >> num1 >> num2; base = 9; // Считываем числа в массив. str = num1; for (i =(int)str.length(); i > 0; i -= base) { if (i < base){ vnum1.push_back(atoi(str.substr(0, i).c_str())); } else { vnum1.push_back(atoi(str.substr(i-base, base).c_str())); } } str = num2; for (i =(int)str.length(); i > 0; i -= base) { if (i < base){ vnum2.push_back(atoi(str.substr(0, i).c_str())); } else { vnum2.push_back(atoi(str.substr(i-base, base).c_str())); } } // Сложение vnum1 = vnum1 + vnum2. carr = 0; for (i = 0; i < std::max(vnum1.size(), vnum2.size()) || carr !=0; ++i) { if (i == vnum1.size()) { vnum1.push_back(0); } vnum1[i] += carr + (i < vnum2.size() ? vnum2[i] : 0); carr = vnum1[i] >= BASE; if (carr != 0) { vnum1[i] -= BASE; } } // Результат. printf("%d", vnum1.empty() ? 0 : vnum1.back()); for (i = (int)vnum1.size() - 2; i >= 0; --i) { printf("%09d", vnum1[i]); } }