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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
shPavel25
6 / 6 / 0
Регистрация: 29.03.2011
Сообщений: 44
#1

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

30.07.2012, 20:57. Просмотров 1000. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2012, 20:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Длинное сложение (C++):

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

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

Найти в тексте самое длинное слово и самое длинное предложение - C++
вписать текст с клавиатуры и найти в этом тексте самое длинное слово и самое длинное предложение.Предложения должны быть разделены точкой.

длинное слово - C++
найти самое длинное слово, которое заканчивается на 'y' помогите пожалуйста Добавлено через 1 час 46 минут написал код кому...

Длинное произведение - C++
Даны целые неотрицательные числа M и K. Найти M*K. Ограничения: 0 ≤ M ≤ 102500, |K|≤109. Ввод из файла longprod.in. В первой строке...

Длинное число - C++
Помогите пожалуйста составить код. Последовательные натуральные числа от a до b выписали одно за другим без пропусков, при этом...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2012, 20:57
Привет! Вот еще темы с ответами:

Самое длинное слово - C++
Помогите пожалуйста, #include &lt;cstring&gt; #include &lt;iostream&gt; using namespace std; #define N 200 void maxword(char* input) { ...

Самое длинное предложение - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { size_t pos_s = 0; size_t n = 0; size_t k = 0; ...

самое длинное слово - C++
нужно прокомментировать программу #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;sstream&gt; #include&lt;conio.h&gt; using...

Самое длинное слово - C++
Дана строка, содержащая пробелы. Найдите в ней самое длинное слово, выведите это слово и его длину. Формат входных данных Задана...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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