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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.83
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
#1

Работа с длинными числами - C++

14.08.2011, 20:56. Просмотров 5858. Ответов 24
Метки нет (Все метки)

Мне нужно прочитать из файла 22-х значные целые числа для количественного сравнения. int и long int не сохраняют полную длину числа. Какой тип можно использовать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2011, 20:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с длинными числами (C++):

Работа с длинными числами - C++
Здравствуйте! На программировании в вузе дали индивидуальную задачу которая предусматривает работу с большими числами: 1 <= N <=...

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

Действия с длинными числами - C++
Ребята, нужна помощь. Информации нигде нет. Задача такова. Нужно провести арифметичексие действия с целыми числами не превышающие 30 цифр....

Класс для работы с длинными числами - C++
Необходимо реализовать класс для работы с длинными числами. Подскажите алгоритм реализации следующих пунктов: 1) Ввод/вывод числа 2)...

Длинная арифметика. Класс работы с длинными числами. - C++
// модул_умнож.cpp : main project file. #include "stdafx.h" #include "vector" #include <algorithm> #include "stdio.h" #include...

Действия над многорозряднымии числами(очень длинными) - C++
Помогите пожалуйста: 1. Задачи: - Введение многоразрядного числа с клавиатуры. - Выведение многоразрядного числа на экран. -...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 20:58 #2
adamo86, есть long long. Если не поместится, и нужно только количественное сравнение (больше/меньше) - читайте как строки и сравнивайте руками.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 21:02 #3
Цитата Сообщение от talis Посмотреть сообщение
long long.
Там чуть больше 19 разрядов
Длинная арифметика в помощь.
0
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 21:05  [ТС] #4
Цитата Сообщение от diagon Посмотреть сообщение
Там чуть больше 19 разрядов
Длинная арифметика в помощь.
long long не берет. А "Длинная арифметика" что это такое? Где можно про это почитать?
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:07 #5
Цитата Сообщение от diagon Посмотреть сообщение
Там чуть больше 19 разрядов
Длинная арифметика в помощь.
Ну вот - пришли к "ручками" Набросал быстро:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// проверяет, что a меньше b.
char a_less_then_b( char *a, char * b )
{
    unsigned short a_len = strlen( a ),
                   b_len = strlen( b ),
                   i;
 
    if( a_len == b_len )
        for( i = 0; i < a_len; i++ )
           if( a[i] != b[i] )
               return a[i] < b[i];
 
    return a_len < b_len;
}
Она не умеет работать с минусом и требует отсутствия ведущих нулей.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 21:09 #6
Цитата Сообщение от adamo86 Посмотреть сообщение
А "Длинная арифметика" что это такое?
Представление числа в виде массива чисел.
Тут алгоритмы есть..
http://e-maxx.ru/algo/big_integer
1
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 21:13  [ТС] #7
Цитата Сообщение от talis Посмотреть сообщение
return a[i] < b[i];
Объясните пожалуйста этот код - что он значит?
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:22 #8
Это значит "вернуть результат операции a[i] < b[i]". Представьте, что это арифметическая операция, вроде сложения. return a[i] + b[i] - это уже понятнее только если у операции "+" результат - сумма левого и правого операнда, то у операции "<" - логическое значение (0 или 1), говорящее о том, что a[i] меньше b[i] (в случае, если оно равно 1) или что a[i] не меньше b[i] (если оно равно 0).

Другими словами, если a[i] меньше b[i], то вернётся 1, если же это не так (a[i] не меньше b[i]), то вернётся 0.

Добавлено через 5 минут
Смысл тут такой: есть два числа:

99999949999
99999969999

Если они имеют разную длину, то очевидно, что большим из них будет число с большей длиной (при условии, что нет лидирующих нулей и без учёта знака минуса). Например, тут очвеидно, что первое число больше второго:

4654684156415213
99999

Если же длина равна, как в первом случае, то нужно слева направо, от старшего разряда к младшему, искать первое различие между числами:

a[0] = 9;
b[0] = 9;
различия нет, идём дальше
a[1] = 9;
b[1] = 9;
различия нет, идём дальше
...
a[6] = 4;
b[6] = 6;
есть различие! если a[6] < b[6], то a < b. Соответственно, return a[i] < b[i].

Надеюсь, смог прояснить ситуацию.
1
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 21:24  [ТС] #9
Цитата Сообщение от talis Посмотреть сообщение
// проверяет, что a меньше b.
char a_less_then_b( char *a, char * b )
{
* * unsigned short a_len = strlen( a ),
* * * * * * * * * *b_len = strlen( b ),
* * * * * * * * * *i;
if( a_len == b_len )
* * * * for( i = 0; i < a_len; i++ )
* * * * * *if( a[i] != b[i] )
* * * * * * * *return a[i] < b[i];
return a_len < b_len;
}
Если a < b, то ответом будет целое значение наверное. Тогда почему функция a_less_then_b типа char?
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:26 #10
char имеет размер в 1 байт. одного байта хватает, чтобы хранить 0 или 1 - больше не требуется :-)

Добавлено через 38 секунд
просто байт - минимальный адресуемый участок памяти, функция не может вернуть бит
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 21:28 #11
Цитата Сообщение от talis Посмотреть сообщение
char имеет размер в 1 байт. одного байта хватает, чтобы хранить 0 или 1 - больше не требуется :-)

Добавлено через 38 секунд
просто байт - минимальный адресуемый участок памяти, функция не может вернуть бит
оО, a bool чем тогда не устроил?
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:29 #12
silentnuke, просто привычка. bool-то тоже 1 байт
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 21:30 #13
Цитата Сообщение от silentnuke Посмотреть сообщение
оО, a bool чем тогда не устроил?
Там же 4 байта.
И по-хорошему функция должна возвращать -1, 0, 1 как strcmp.
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 21:35 #14
Цитата Сообщение от talis Посмотреть сообщение
silentnuke, просто привычка. bool-то тоже 1 байт
да, но это в стиле быдлокода.)
ведь bool как раз и создан для этих целей, и куда привычнее увидеть bool, все станет на свои места, а с вашим char придется смотреть реализацию, чтобы понять чтоже оно возвращает. имхо

Добавлено через 3 минуты
Цитата Сообщение от diagon Посмотреть сообщение
Там же 4 байта.
И по-хорошему функция должна возвращать -1, 0, 1 как strcmp.
да ну, с каких это пор bool 4 байта? http://msdn.microsoft.com/en-us/libr...(v=VS.71).aspx
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:37 #15
Цитата Сообщение от diagon Посмотреть сообщение
И по-хорошему функция должна возвращать -1, 0, 1 как strcmp.
Зачем? 1 = меньше, 0 = не меньше, -1 = наверное всё-таки меньше В любом случае, перепишите под себя

Цитата Сообщение от silentnuke Посмотреть сообщение
да, но это в стиле быдлокода.)
Во-первых, в C bool изначально не было, и все программеры старой школы по-вашему "быдлокодеры". Брайан Керниган и Деннис Ритчи в частности. Во-вторых gcc у меня до сих пор пишет error: 'bool' undeclared (first use in this function). Так что вот так вот.

Добавлено через 1 минуту
Цитата Сообщение от silentnuke Посмотреть сообщение
с каких это пор bool 4 байта?
Цитата Сообщение от msdn
Its size is unspecified.
Зависит от компилятора. В любом случае, чтобы не напороться на bool из 4-х байт, я бы всегда использовал char - он везде будет 1 байт.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2011, 21:37
Привет! Вот еще темы с ответами:

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

Операции с длинными числами - неправильно выводится результат - C++
Здравствуйте, помогите с операцией умножение неправильно выводит рез-тат, например 555 * 3 = 555

Работа с числами - C++
ну вопщем у меня есть решение задач на турбо паскале а мне их надо решить в С++...я решил, принес преподавателю а мне сказали, что надо без...

Работа с числами - C++
Помогите составить программу. Даны: натуральное число n, действительные числа А1,А2,А3….Аn. Получить: сумму отрицатьльных и...


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

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

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