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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
AlexMind
 Аватар для AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
29.10.2011, 17:48     Длинная арифметика. Задача А + В #1
Прошу помочь решить эту задачку, желательно с закомментированными построчными объяснениями. Особенно про подключаемые файлы -инпут и аутпут. Также желательно предельно простое решение (без всяких там классов, функций и проч., онли циклы и массивы). Заранее спасибо.

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

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

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

Длинная арифметика C++
Длинная арифметика C++
Длинная арифметика C++
Длинная арифметика N+1 C++
C++ длинная арифметика
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
29.10.2011, 18:40     Длинная арифметика. Задача А + В #2
на каком языке?
AlexMind
 Аватар для AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
29.10.2011, 20:14  [ТС]     Длинная арифметика. Задача А + В #3
C++ ,если можно
amor1k
Студент
 Аватар для 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;
    }
}
Байт
 Аватар для Байт
13978 / 8809 / 1228
Регистрация: 24.12.2010
Сообщений: 15,959
30.10.2011, 00:12     Длинная арифметика. Задача А + В #5
А при чем здесь ДЛИННАЯ АРИФМЕТИКА, хоть убей - не пойму.

Добавлено через 1 минуту
Для 10100 даже short подойдет
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
30.10.2011, 00:50     Длинная арифметика. Задача А + В #6
Возможно,
Цитата Сообщение от AlexMind Посмотреть сообщение
10100
- это максимальная длина строки!
Хотя, мне тоже кажется, что это не так ( видно из условия задачи ).
Байт
 Аватар для Байт
13978 / 8809 / 1228
Регистрация: 24.12.2010
Сообщений: 15,959
30.10.2011, 01:13     Длинная арифметика. Задача А + В #7
Цитата Сообщение от Mиxaил Посмотреть сообщение
Возможно, - это максимальная длина строки!
Хотя, мне тоже кажется, что это не так ( видно из условия задачи ).
Скорее всего именно так! Тогда - поиск по форуму и Гугл в помощь!
Длинные числа - это самая простая из сложных задач. Решать ее - просто удовольствие.
Так не будем же отнимать этого удовольствия у ТС.
ruslan_abel
 Аватар для ruslan_abel
33 / 33 / 4
Регистрация: 06.05.2011
Сообщений: 91
30.10.2011, 01:15     Длинная арифметика. Задача А + В #8
Очевидно имелось в виду: "два неотрицательных целых числа, не превышающих 10^100", тогда как раз длинная арифметика только поможет.
Байт
 Аватар для Байт
13978 / 8809 / 1228
Регистрация: 24.12.2010
Сообщений: 15,959
30.10.2011, 03:26     Длинная арифметика. Задача А + В #9
Цитата Сообщение от ruslan_abel Посмотреть сообщение
Очевидно имелось в виду: "два неотрицательных целых числа, не превышающих 10^100", тогда как раз длинная арифметика только поможет.
А вы просто - экстрасенс!
AlexMind
 Аватар для 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
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
30.10.2011, 11:07     Длинная арифметика. Задача А + В #11
так у вас написано два числа, зачем делать массивы
AlexMind
 Аватар для AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
30.10.2011, 11:12  [ТС]     Длинная арифметика. Задача А + В #12
так даны два числа размером с количеством цифр 101 в каждом . и сама тема - длинная арифметика. подсказали что решается с двумя массивами, притом складываются каждый i-ый элемент, при необходимости с переводом разряда в i+1 -ый элемент. притом складывается все это в третий массив. и записывается в аутпут.тхт. в теории - как это делать - мне ясно,но сама реализация в коде - чтото не выходит
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
30.10.2011, 11:16     Длинная арифметика. Задача А + В #13
Сложение больших чисел
AlexMind
 Аватар для 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
 Аватар для aeshes
437 / 200 / 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.
Тогда в своем цикле вы в конец массива пишете непонятно что
Попробуйте сделать массивы символьными
AlexMind
 Аватар для AlexMind
0 / 0 / 0
Регистрация: 29.10.2011
Сообщений: 9
30.10.2011, 21:48  [ТС]     Длинная арифметика. Задача А + В #16
а разве незадействованные ячейки массива не инициализируются нулями автоматически?

или на всякий пожарный лучше просто массивы А и В обнулить заранее, а далее при вводе элементов нули будут просто затираться вводимыми значениями. так?

суть в том ,что числа одного числа (товтология какая-то..) ..хмм...нет... цифры одного числа - должны быть записаны подряд, а не через пробел.и они должны вводиться так в инпут.тхт а далее уже складываться между собой и записываться в аутпут.тхт

ааааа...я уже запутался....

Цитата Сообщение от aeshes Посмотреть сообщение
как мне кажется, вы неверно читаете числа в массивы из файла.
насколько я понимаю-это число как бы одновременно вводится и в инпут.тхт и в каждый элемент массива. нет?
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
30.10.2011, 21:58     Длинная арифметика. Задача А + В #17
AlexMind, нет, число не вводится в инпут.тхт и массив одновременно.
У тебя есть заранее созданный файл input.txt, лежащий в папочке с программой, в который записаны 2 числа, например,
123
45
Эти числа из файла должны читаться в массив. Но при такой записи inp>>A[i]; ты читаешь число целиком (123) и записываешь его в одну ячейку массива, а не по отдельным цифрам.

Незадействованные ячейки массива нулями автоматически не заполняются. И тебе не поможет обнуление массивов заранее, потому что тогда у тебя условно получатся числа 123000 и 450000.
И их сумма будет вычислена неверно.

Мои предложения: вместо массивов int используй массивы char. Они как раз позволят тебе считанное из файла число расписать посимвольно (по одной цифре в ячейку массива). Затем к более короткому числу нужно дописать впереди нули (например, из чисел 123 и 45 надо получить 123 и 045), и складывать их посимвольно с конца, а не сначала, как ты делаешь это сейчас.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 04:18     Длинная арифметика. Задача А + В
Еще ссылки по теме:

C++ Длинная арифметика
C++ Длинная арифметика
Длинная арифметика C++

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

Или воспользуйтесь поиском по форуму:
dnmscorpion
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 6
05.04.2014, 04:18     Длинная арифметика. Задача А + В #18
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
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
*
*
int main()
{ string a,b;
in>>a>>b;
int max1;
vector<int> x;
vector<int> y;
vector<int> s;
if (a.size()>b.size())
****max1 = a.size();
else
****max1= b.size();
x.resize(max1+1);
y.resize(max1+1);
s.resize(max1+1);
for (int j=0,i=x.size()-1; j<a.size()&& i>0; j++,i--)
x[i]= a[a.size()-j-1]- '0';
*
for (int j=0,i=y.size()-1;j<b.size()&& i>0; j++,i--)
y[i]= b[b.size()-j-1]- '0';
*
for (int i=x.size()-1;i>=0; i--) {
********s[i]=x[i]+y[i];
********if (s[i]>9) {
************s[i]%=10;
************x[i-1]+=1;
********}
*
*
}
*
**if (s[0]==0)
**for (int i=1; i<s.size(); i++)
*****out << s[i];
*******else
*******for (int i=0; i<s.size(); i++)
*out <<s[i];
*
*
****return 0;
}
Yandex
Объявления
05.04.2014, 04:18     Длинная арифметика. Задача А + В
Ответ Создать тему
Опции темы

Текущее время: 14:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru