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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
#1

Длинная арифметика. Задача А + В - C++

29.10.2011, 17:48. Просмотров 2323. Ответов 17
Метки нет (Все метки)

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

Требуется:
сложить два целых числа А и В.

Входные данные:
Во входном файле INPUT.TXT записано два неотрицательных целых числа, не превышающих 10100, по одному в каждой строке.

Выходные данные:
В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел А и В, без лидирующих нулей.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2011, 17:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Длинная арифметика. Задача А + В (C++):

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

Длинная арифметика - C++
Всем доброго вечера. Нужна помощь в решении задачи. Составить программу для вычисления числа: 2^64-1. В результате сохранить все...

Длинная арифметика С++ - C++
требуется написать задачу для подсчета суммы s=1^2+2^2+3^2+...+n^2 n>=20000

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

Длинная арифметика - C++
Алгоритмы всех операций в принципе уже готовы (длина числа ограничивается только ресурсами ПК). Осталось только подобрать качественный...

длинная арифметика - C++
Долгое время бьюсь как составить программу по этой теме в интернете искал нашел это for (int i=(int)s.length(); i>0; i-=9) if (i < 9) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
29.10.2011, 18:40 #2
на каком языке?
AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
29.10.2011, 20:14  [ТС] #3
C++ ,если можно
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
29.10.2011, 23:57 #4
ну вот так, через некоторое время, здесь напишут код по короче)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"rus");
    ofstream out("OUTPUT.txt");
    ifstream in("INPUT.txt");
    int a, b;
    char ch[80];
    in >> a >> b;
    if (a > 10100 || a < 0 || b > 10100 || b < 0)
    {
        strcpy(ch,"Неправильные значения!");
        out << ch;
    }
    else
    {
        int s = a + b;
        out << "Сумма двух чисел = " << s;
    }
}
Байт
Эксперт C
15982 / 10250 / 1536
Регистрация: 24.12.2010
Сообщений: 19,332
30.10.2011, 00:12 #5
А при чем здесь ДЛИННАЯ АРИФМЕТИКА, хоть убей - не пойму.

Добавлено через 1 минуту
Для 10100 даже short подойдет
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
30.10.2011, 00:50 #6
Возможно,
Цитата Сообщение от AlexMind Посмотреть сообщение
10100
- это максимальная длина строки!
Хотя, мне тоже кажется, что это не так ( видно из условия задачи ).
Байт
Эксперт C
15982 / 10250 / 1536
Регистрация: 24.12.2010
Сообщений: 19,332
30.10.2011, 01:13 #7
Цитата Сообщение от Mиxaил Посмотреть сообщение
Возможно, - это максимальная длина строки!
Хотя, мне тоже кажется, что это не так ( видно из условия задачи ).
Скорее всего именно так! Тогда - поиск по форуму и Гугл в помощь!
Длинные числа - это самая простая из сложных задач. Решать ее - просто удовольствие.
Так не будем же отнимать этого удовольствия у ТС.
ruslan_abel
33 / 33 / 4
Регистрация: 06.05.2011
Сообщений: 91
30.10.2011, 01:15 #8
Очевидно имелось в виду: "два неотрицательных целых числа, не превышающих 10^100", тогда как раз длинная арифметика только поможет.
Байт
Эксперт C
15982 / 10250 / 1536
Регистрация: 24.12.2010
Сообщений: 19,332
30.10.2011, 03:26 #9
Цитата Сообщение от ruslan_abel Посмотреть сообщение
Очевидно имелось в виду: "два неотрицательных целых числа, не превышающих 10^100", тогда как раз длинная арифметика только поможет.
А вы просто - экстрасенс!
AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
30.10.2011, 10:42  [ТС] #10
Пардон, не заметил - 10^100

Добавлено через 21 минуту
и вопрос - если у нас есть массив максимального размера 10^100 , а я ввожу число, меньшее этого размера - то что делать с остальным пространством? заполнять нулями? или что? и как это делается?

вот кусочек того что мозг родил:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <fstream>
#include <iostream>
using namespace std;
int main ()
{
ifstream f("input.txt"); 
ofstream h("output.txt");
 
const int MAX_SIZE=101;
 
int a[MAX_SIZE];
int b[MAX_SIZE];
 
cout << "Enter A " << endl;
for (int i=0; i<MAX_SIZE; i++)
{
    f >> a[i];
}
 
cout << "Enter B " << endl;
for (int i=0; i <MAX_SIZE; i++)
{
    f >> b[i];
}
Добавлено через 2 минуты
но в этом варианте заполнения массива - придется его весь заполнять - а именно - 101 цифра.
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
30.10.2011, 11:07 #11
так у вас написано два числа, зачем делать массивы
AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
30.10.2011, 11:12  [ТС] #12
так даны два числа размером с количеством цифр 101 в каждом . и сама тема - длинная арифметика. подсказали что решается с двумя массивами, притом складываются каждый i-ый элемент, при необходимости с переводом разряда в i+1 -ый элемент. притом складывается все это в третий массив. и записывается в аутпут.тхт. в теории - как это делать - мне ясно,но сама реализация в коде - чтото не выходит
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
30.10.2011, 11:16 #13
Сложение больших чисел
AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
30.10.2011, 21:05  [ТС] #14
благодарю)

Добавлено через 9 часов 47 минут
решил таки сам добить эту задачку. и на первом же тесте - wrong answer. понять не могу-что не так. эксперты,подскажите ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <fstream>
#include <iostream>
using namespace std;
int main ()
{
setlocale(0, "");
ifstream inp("input.txt"); 
ofstream out("output.txt");
 
const int MAX_SIZE=102;
int carry=0,i=0;
 
int A[MAX_SIZE];
int B[MAX_SIZE];
int C[MAX_SIZE];
 
//обнуляем массив C
for (int i=0; i<MAX_SIZE-1; i++)
{
    C[i]=0;
}
 
 
//Ввод массива А в файл
for (int i=0; i<=MAX_SIZE-1; i++)
{
    inp >> A[i];
}
 
//Ввод массива В файл
for (int i=0; i<=MAX_SIZE-1; i++)
{
    inp >> B[i];
}
 
//складываем 2 массива
for(i=0;i<=MAX_SIZE-1;i++)
{
carry=carry+A[i]+B[i];
C[i]=carry%10;
carry=carry/10;
}
 
//печать массива С в файл
for(i=0;C[i]!=0;i++)
{
    out << C[i];
}
 
return 0;
}
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
30.10.2011, 21:19 #15
AlexMind, как мне кажется, вы неверно читаете числа в массивы из файла. Предполагаю, что формат входного файла - что-то типа такого (цифры в числе записаны слитно, а не разделены пробелами)
123
12
Вы же пытаетесь их считывать в массив именно посимвольно, надеясь получить A[0]=1, A[1]=2, A[3]=3. А у вас оказывается A[0]=123. Соответственно и результат сложения будет не тот
Кроме того, представьте, что файл содержит два числа, длина которых меньше, чем MAX_SIZE.
Тогда в своем цикле вы в конец массива пишете непонятно что
Попробуйте сделать массивы символьными
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2011, 21:19
Привет! Вот еще темы с ответами:

Длинная арифметика - C++
Вот условие задачи: Во время исследований, посвященных появлению жизни на планете Олимпия, учеными было сделано несколько сенсационных...

Длинная арифметика - C++
Здравствуйте помогите пожалуйста с задачкой на с++ борландс :wall: 1. &quot;Вычислить точное значение (n!)! &quot; 2. &quot;Для заданной...

Длинная арифметика. - C++
Даны два длинных числа a и b. Найти частное и остаток при делении числа a на b. Не могу реализовать деление отрицательных чисел. Помогите...

Длинная арифметика - C++
Всем привет! Хотелось бы узнать -- есть ли в С++ библиотека, где реализованы операции над длинными числами?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.10.2011, 21:19
Ответ Создать тему
Опции темы

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