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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.60
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
#1

Сложение двух чисел - C++

25.03.2010, 18:23. Просмотров 6176. Ответов 17
Метки нет (Все метки)

Сложение двух чисел. Как, если оба числа в диапазоне от 0 до 2*10^9 ? Если складывать 2*10^9 + 2*10^9 то long int не справляется((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2010, 18:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сложение двух чисел (C++):

Вычислить сумму двух длинных бинарных чисел, используя сложение чисел в двоичной системе счисления - C++
Задано положительное и отрицательное число в двоичной системе.Составить программу вычисления суммы этих чисел, используя сложения чисел в...

Сложение двух чисел - C++
Условие задачи в её названии. Я так понимаю тут длинная арифметика. Во входном файле два целых неотрицательных числа A и B (A, B ≤...

Сложение двух чисел - C++
P.S Код должен выполнять аналогию сложения двух числе в столбик. Добавлено через 34 секунды

Сложение двух чисел - C++
Написать программу сложения двух чисел на Visual c++. Вот мой код. #include "stdafx.h" #include <stdio.h> #include <conio.h> ...

Сложение двух больших чисел - C++
#include <vector> #include <fstream> #include <string> using namespace std; int main() { const int base = 1000 * 1000 *...

Сложение двух чисел на TurboC++ - C++
Всем привет! Подскажите, в чем ошибка с переменной с? Вот скрины - Коды программ надо переписывать в тему!

17
UKOL
112 / 64 / 7
Регистрация: 17.11.2009
Сообщений: 258
25.03.2010, 18:33 #2
попробуй тип, unsigned long 4 байта 32 бита диапазон от 0 до 4294967295 должно влезть

или уж double, float

C++
1
2
3
4
int a;
int b;
double c;
c=(double)(a+b);
1
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
25.03.2010, 19:04  [ТС] #3
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <fstream.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
void WriteFile(int a);//ÔóГ*êöèÿ Г§Г*ГЇГЁГ±ГЁ Гў ГґГ*éë
double Summ(int a, int b); //ÔóГ*êöèÿ Г*Г*õîæäåГ*ГЁГї ñóììû äâóõ Г·ГЁГ±ГҐГ«
 
int main()
{
        int a, b;
        double s;
 
        ifstream instream("input.txt");
        if (!instream) {
                cout<<"Г”Г*éë Г*ГҐ îòêðûëñÿ"<<endl;
                getch();
                return 0; }
        while(!instream.eof()) {
                instream>>a>>b;
                s=Summ(a, b);
                WriteFile(s); }
        instream.close();
        getch();
        return 0;
}
 
 
void WriteFile(double s)
{
ofstream outstream("output.txt", ios::app);
outstream<<s<<endl;
outstream.close();
}
 
double Summ(int a, int b)
{       double s;
 
        s=(double)(a+b);
        return s;
}
Почему ругается на код? Вот ошибка:
Код
[Linker Error] Unresolved external 'WriteFile(int)' referenced from D:\ÐÀÁÎÒÀ (WORK)\ÊÎÍÊÓÐÑ\UNIT1.OBJ
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.03.2010, 19:10 #4
WiDe, потому что прототип принимает int (void WriteFile(int a)), а реализация double (void WriteFile(double s)).
1
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
25.03.2010, 19:42  [ТС] #5
Блин, не заметил=) Но всё равно не сработало. После сложения прога вывела -2.94967e+08

Добавлено через 1 минуту
Всё, заработало, сделал через unsigned long. Спасибо!

Добавлено через 3 минуты
Кстати, а данную программу реально переделать так, чтобы чтение файла вынести в обдельную функцию? При условии, что входной файл имеет вид:
Код
5 8
32 68
436 54
а выходной суммы этих чисел на каждой строке соответственно. Я смог сделать (код выше) только если функция чтения в мейне, а записи и нахождения суммы в отдельных...
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
25.03.2010, 19:57 #6
Попробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void ReadFile()
{
    int a, b;
        double s;
 
        ifstream instream("input.txt");
        if (!instream) {
                cout<<"Файл не открылся"<<endl;
                getch();
                exit(1); }
        while(!instream.eof()) {
                instream>>a>>b;
                s=Summ(a, b);
                WriteFile(s); }
        instream.close();
}
Добавлено через 1 минуту
ЗЫ. Можно попробовать вместо double использовать целый тип long long. На моей машине максимальное значение, которое помещается в этот тип, равно 9223372036854775807

Добавлено через 24 секунды
Я думаю, этого с лихвой хватит
1
KIRASIR
5 / 5 / 0
Регистрация: 24.03.2010
Сообщений: 26
25.03.2010, 20:06 #7
а если попробовать число разбить на: десятки, сотни, тысячи и т.д.
а затем складывать отдельно десятки, сотни и т.д.
после всего все полученные суммы по-разрядно внести в массив и вывод на экран.
поправьте если не прав.
0
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
25.03.2010, 21:45  [ТС] #8
Nameless One, ну про такой вариант я тоже думал... И мне кажется что по другому тут не сделаешь... В main получится только вызов ReadFile(); и всё=) Всё-равно спасибо!

KIRASIR, можно и так, но это намного сложнее реализуемо.
0
KIRASIR
5 / 5 / 0
Регистрация: 24.03.2010
Сообщений: 26
25.03.2010, 22:14 #9
такие задачи на олимпиадах по программированию даются.
Сложить два числа на скорость. Каждое из которых имеет по 32 цифры. Разрядность шины 16.

вот тогда и приходится разбивать число на несколько составляющих. И кстати, хз почему но было подмечено что если число делить на две составляющие то система нагружается меньше, а если разбивать на 3 составляющие то увеличивается прирост к производительности проги на 30%(или наоборот). В таком стиле обычно военных учат программировать.
0
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
25.03.2010, 23:25  [ТС] #10
Просто я думаю вряд ли в таком задании будет приветствоваться использование массива...
0
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
26.03.2010, 01:53 #11
Вообще должен прокатить unsigned long long или long double (на некоторых машинах),


Цитата Сообщение от WiDe Посмотреть сообщение
Просто я думаю вряд ли в таком задании будет приветствоваться использование массива...


я с тобой не согласен да действительно на олимпиадах даются такие задания в прошлом году в четвертьфинале была задаса на длинную арифметику было число размеров в 100 000 знаков до "." и 100 000 после точки и эти два числа нужно было сравнить и все это сделать за секунду.... могло оно записывается как 000001616846684.168461510000000 единственный нормальный вариант это массив из char* , я думаю операции с длинной арифметикой будут приветствовать все преподаватели. тем более тут еще контроль переходящей в старший разряд 1-цей. кстати очень полезно будет если ты напишешь умножение таких чисел.
0
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
26.03.2010, 16:57  [ТС] #12
Надо попробовать подобный вариант...
0
fasked
Эксперт С++
4974 / 2554 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.03.2010, 16:59 #13
Цитата Сообщение от breate Посмотреть сообщение
единственный нормальный вариант это массив из char*
Это как раз ненормальный вариант, лучше всего использовать массивы из типов, разрядность который соответсвует разрядности ОС, чтобы производительность была максимальной
0
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
26.03.2010, 17:17 #14
Цитата Сообщение от fasked Посмотреть сообщение
Это как раз ненормальный вариант, лучше всего использовать массивы из типов, разрядность который соответсвует разрядности ОС, чтобы производительность была максимальной
код в студию! уловие: в файле лежат 2 числа типа
Код
00000000000000000051680046156846.546165188598000
00000000000000000000000000000000000000000000051680046156846.546165188598001
ограничение на числа [100 000][.][100 000] сравнить их. время выполнения 1 сек@1.2GHZ
32-бита ось
0
WiDe
10 / 10 / 1
Регистрация: 23.02.2010
Сообщений: 120
28.03.2010, 20:37  [ТС] #15
Блин, я тут заметил, что unsigned long не складывает отрицательные числа... long long тоже. Другие же варианты, о которых говорили, складывают, но там нельзя сложить большие числа (вместо 2000000000 выводит -2.94967e+08
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2010, 20:37
Привет! Вот еще темы с ответами:

Сложение двух длинных чисел. - C++
всем привет. как вы считаете, каким способом лучше сделать? или абсолютно всеравно?) #include &lt;iostream&gt; #include &lt;string&gt; ...

Рекурсия: сложение двух чисел - C++
Написать рекурсивную программу сложения двух чисел........ помогите срочно нужно

Сложение столбиков двух массивов чисел - C++
Например есть два массива int a={2,8,3,9,4,7,5,8,6,7,3,8,2}; int b={4,7,3,8,5,7,3,8}; Как мне их сложить в столбик (длинная...

Измерить время выполнения (сложение двух чисел) - C++
Вот у меня есть код, который выполняет сложение двух чисел.. Помогите вставить сюда GetTickCount и QueryPerformanceCounter.... Только нужно...


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

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

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