Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм Дейкстры https://www.cyberforum.ru/ cpp-beginners/ thread630873.html
Добрый день, помогите пож-та решить задачи на с++. Нашел решение (расписаны все алгоритмы, процедуры подсчета и т. д.), но сложность состоит в том, что я не понимаю строищихся структур и вообще...
C++ Dev-C++ 4.9.9.2 не показывает номера строк
Чё делать? +++++++++++++++++++++++++++++++++++++++ Я в неё интегрировал g++ 4.6.1 по-моему, вот инсталлятор mingw-get-inst-20111118.exe (пользовался им и раньше, всё было нормально) ...
C++ Делаю Memory Manager Array с простым (int) exception последний элемент чудит
//array_hpp #ifndef Array_HPP #define Array_HPP #include "Point.hpp" #include <iostream> class Array {
C++ "Плейсхолдер" (placeholder) "Плейсхолдер" (переводится как прототип или заполнитель ?) - так говорят многие участники на этом форуме, объясните пожалуйста, что это такое ?? поисковик выдал мне много всего от хабра с html5 до... https://www.cyberforum.ru/ cpp-beginners/ thread630846.html
C++ Рисование ASCII кодами и русский текст в консоли https://www.cyberforum.ru/ cpp-beginners/ thread630821.html
Всем добрый вечер. И вот такой вопрос есть. Сначала печатаю в консоли текст а под ним горизонтальную линию. Только вместо линии получаются каракули. Уже по разному пробовал, шрифты менял и ничего не...
C++ Составить программу для вычисления количества цифр среди элементов списка.
Тема: Динамические структуры данных. Линейные списки. Дан список А, состоящий из записей: первое поле – символ, второе – адрес следующего элемента. Составить программу для вычисления количества цифр...
C++ Запуск программ на других компах
Всем привет, вообщем перерыл весь интернет, как запускать скомпилированную программу на разных компьютерах, пробывал ставить и статич библиотеки и dll и mt\ и тд вылетали разн ошибки, вообщем...
C++ Цельсий в Фaренгейт и Реoмюр ========== Для тeмпературы от -5 до +5 °C с шaгом 1.25 °C вывeсти соoтвeтствующие знaчения по Фaренгейту и Реoмюру. oформить вывoд в видe крaсивpй тaблицы. Дробные числа округлить до 2 знаков... https://www.cyberforum.ru/ cpp-beginners/ thread630771.html
C++ Define внутри макроса https://www.cyberforum.ru/ cpp-beginners/ thread630770.html
Подкажите возможно ли написать макрос кот. создаст #define? например: #define MACRO(name) #define NAME name знаю, что напрямую так не напишешь т.к. второй define будет взят в кавычки, но может...
C++ Проверка итератора как проверить указывает ли на что либо итератор или он уже неправильный? https://www.cyberforum.ru/ cpp-beginners/ thread630762.html
6 / 6 / 0
Регистрация: 29.03.2011
Сообщений: 47
0

Длинное сложение

30.07.2012, 20:57. Просмотров 1285. Ответов 0
Метки (Все метки)

Добрый день, помогите пож-та решить задачи на с++. Нашел решение (расписаны все алгоритмы, процедуры подсчета и т. д.), но сложность состоит в том, что я не понимаю строищихся структур и вообще никогда не программировал на c++.Поэтому прошу помочь собрать все воедино (чтение из файла, работа программы, запись в файл). Основная задача - считать с файла, воспользоваться функцией, вывести в файл

Длинное сложение
Вход:
В первой строке записано натуральное число A. Во второй строке записано натуральное число B. Числа записаны без ведущих нулей. (A, B < 10100)
Выход:
В единственной строке выведите результат без ведущих нулей.
***решение
Хранить длинные числа будем в виде вектора чисел int, где каждый элемент — это одна цифра числа.

C++
1
typedef vector<int> lnum;
Для повышения эффективности будем работать в системе по основанию миллиард, т.е. каждый элемент вектора
lnum содержит не одну, а сразу 9 цифр:

C++
1
const int base = 1000*1000*1000;
Цифры будут храниться в векторе в таком порядке, что сначала идут наименее значимые цифры (т.е. единицы,
десятки, сотни, и т.д.).
Кроме того, все операции будут реализованы таким образом, что после выполнения любой из них лидирующие нули (т.
е. лишние нули в начале числа) отсутствуют (разумеется, в предположении, что перед каждой операцией
лидирующие нули также отсутствуют). Следует отметить, что в представленной реализации для числа ноль
корректно поддерживаются сразу два представления: пустой вектор цифр, и вектор цифр, содержащий
единственный элемент — ноль.
Вывод
Самое простое — это вывод длинного числа.
Сначала мы просто выводим самый последний элемент вектора (или 0, если вектор пустой), а затем выводим
все оставшиеся элементы вектора, дополняя их нулями до 9 символов:
C++
1
2
3
printf ("%d", a.empty() ? 0 : a.back());
for (int i=(int)a.size()-2; i>=0; --i)
printf ("%09d", a[i]);
(здесь небольшой тонкий момент: нужно не забыть записать (int), поскольку в противном случае число
будут беззнаковым, и если a.size()<=1, то при вычитании произойдёт переполнение)
Чтение
Считываем строку в string, и затем преобразовываем её в вектор:
C++
1
2
3
4
for (int i=(int)s.length(); i>0; i-=9)
if (i < 9)
a.push_back (atoi (s.substr (0, i).c_str()));
elsea.push_back (atoi (s.substr (i-9, 9).c_str()));
Если использовать вместо string массив char'ов, то код получится ещё компактнее:
C++
1
2
3
4
for (int i=(int)strlen(s); i>0; i-=9) {
s[i] = 0;
a.push_back (atoi (i>=9 ? s+i-9 : s));
}
Сложение
Прибавляет к числу a число b и сохраняет результат в a:
C++
1
2
3
4
5
6
7
8
int carry = 0;
for (size_t i=0; i<max(a.size(),b.size()) || carry; ++i) {
if (i == a.size())
a.push_back (0);
a[i] += carry + (i < b.size() ? b[i] : 0);
carry = a[i] >= base;
if (carry) a[i] -= base;
}


Вернуться к обсуждению:
Длинное сложение
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2012, 20:57
Готовые ответы и решения:

Длинное сложение
Здравствуйте! На форуме первый день и сразу же есть вопрос. Как нормально, быстро и адекватно...

Строки. В заданном тексте найти самое длинное слово и самое длинное предложение.
Задача: В заданном тексте найти самое длинное слово и самое длинное предложение. Помогите решить На...

Найти в тексте самое длинное слово и самое длинное предложение
вписать текст с клавиатуры и найти в этом тексте самое длинное слово и самое длинное...

Правильно ли я сделал длинное сложение?
push di; push esi; push edx; push ecx; push ebx; push eax; ...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.