Форум программистов, компьютерный форум CyberForum.ru

Длинное сложение - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Алгоритм Дейкстры http://www.cyberforum.ru/cpp-beginners/thread630873.html
Добрый день, помогите пож-та решить задачи на с++. Нашел решение (расписаны все алгоритмы, процедуры подсчета и т. д.), но сложность состоит в том, что я не понимаю строищихся структур и вообще никогда не программировал на c++.Поэтому прошу помочь собрать все воедино (чтение из файла, работа программы, запись в файл). Основная задача - считать с файла, воспользоваться функцией, вывести в файл...
C++ Dev-C++ 4.9.9.2 не показывает номера строк Чё делать? +++++++++++++++++++++++++++++++++++++++ Я в неё интегрировал g++ 4.6.1 по-моему, вот инсталлятор mingw-get-inst-20111118.exe (пользовался им и раньше, всё было нормально) Инсталлятор качает чего-то с сайта, обновления, наверное. И теперь ошибки стали выводиться на русском языке, а номера строк, где эти ошибки есть, не выводятся. Добавлено через 5 часов 17 минут Парни, вы... http://www.cyberforum.ru/cpp-beginners/thread630866.html
C++ Делаю Memory Manager Array с простым (int) exception последний элемент чудит
//array_hpp #ifndef Array_HPP #define Array_HPP #include "Point.hpp" #include <iostream> class Array {
C++ "Плейсхолдер" (placeholder)
"Плейсхолдер" (переводится как прототип или заполнитель ?) - так говорят многие участники на этом форуме, объясните пожалуйста, что это такое ?? поисковик выдал мне много всего от хабра с html5 до как лечить удава. Ребят, еще вопрос у меня в теме по Си )) про signal.h, помогите разобраться ))
C++ Рисование ASCII кодами и русский текст в консоли http://www.cyberforum.ru/cpp-beginners/thread630821.html
Всем добрый вечер. И вот такой вопрос есть. Сначала печатаю в консоли текст а под ним горизонтальную линию. Только вместо линии получаются каракули. Уже по разному пробовал, шрифты менял и ничего не помогает. Получается или текс по-русски а вместо линии непонятно что, или линия нормальная а вместо текста абракадабра. Как это можно одновременно сделать? #include <iostream> #include <windows.h>...
C++ Составить программу для вычисления количества цифр среди элементов списка. Тема: Динамические структуры данных. Линейные списки. Дан список А, состоящий из записей: первое поле – символ, второе – адрес следующего элемента. Составить программу для вычисления количества цифр среди элементов списка. подробнее

Показать сообщение отдельно
shPavel25
 Аватар для shPavel25
6 / 6 / 0
Регистрация: 29.03.2011
Сообщений: 44
30.07.2012, 20:57     Длинное сложение
Добрый день, помогите пож-та решить задачи на с++. Нашел решение (расписаны все алгоритмы, процедуры подсчета и т. д.), но сложность состоит в том, что я не понимаю строищихся структур и вообще никогда не программировал на 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru