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

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

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

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

14.08.2011, 20:56. Просмотров 6733. Ответов 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. Задачи: - Введение многоразрядного числа с клавиатуры. - Выведение многоразрядного числа на экран. -...

24
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 21:39 #16
Цитата Сообщение от talis Посмотреть сообщение
Зачем? 1 = меньше, 0 = не меньше, -1 = наверное всё-таки меньше В любом случае, перепишите под себя


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

Добавлено через 1 минуту



Зависит от компилятора. В любом случае, чтобы не напороться на bool из 4-х байт, я бы всегда использовал char - он везде будет 1 байт.
я знаю, что в С изначально его не было.
ну а в С++ bool есть)
давайте будем вспоминать чего ещё где не было?)
хотя ладно, у каждого свои предпочтения, не будем спорить.
0
talis
793 / 545 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:40 #17
Цитата Сообщение от silentnuke Посмотреть сообщение
ну это ветка С++
Да ладно!

Цитата Сообщение от текст_наверху_этой_страницы
Форум программистов и сисадминов > Форум программистов > C/C++ > С/С++ для начинающих
0
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 21:45 #18
Цитата Сообщение от silentnuke Посмотреть сообщение
да ну, с каких это пор bool 4 байта? http://msdn.microsoft.com/en-us/libr...(v=VS.71).aspx
Тьфу...
Но на каком-то компиляторе он действительно 4 байта весил.

Цитата Сообщение от talis Посмотреть сообщение
Зачем? 1 = меньше, 0 = не меньше, -1 = наверное всё-таки меньше
Ну так в стиле strcmp. -1 : меньше, 0 : равно, 1 : больше. Что бы не писать много функций для сравнения.
0
talis
793 / 545 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:54 #19
diagon, strcmp, тогда уж, возвращает не -1 и не +1, а число < 0 и число > 0, соответственно. Выглядит это примерно так:

C
1
2
3
4
5
6
7
8
9
10
11
12
int strcmp( char *str1, char *str2 )
{
   int difference, i;
   for( i = 0; str1[i] != 0 && str2[i] != 0; i++ )
   {
      difference = str1[i] - str2[i];
      if( difference != 0 )
         return difference;
   }
 
   return str1[i] - str2[i];
}
Добавлено через 4 минуты
так лучше

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int strcmp( char *str1, char *str2 )
{
   int difference;
   while( *str1 != 0 && *str2 != 0 )
   {
      difference = *str1 - *str2;
      if( difference != 0 )
         return difference;
 
      str1++;
      str2++;
   }
 
   return *str1 - *str2;
}
Впрочем, согласитесь, это всё далеко от длинной арифметики, о которй спрашивал ТС
0
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 21:55 #20
Цитата Сообщение от talis Посмотреть сообщение
Выглядит это примерно так:
Необязательно, может возвращать что угодно =)
В strcmp не имеет значение длина строк, поэтому можно просто возвращать их разность. А в случае с длинными числами 10 больше 9, к примеру. Поэтому проще всего возвращать константу...
0
talis
793 / 545 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 21:57 #21
diagon, в спецификации сказано <0 и >0, так что действительно, что угодно
А вот зачем вычислять разность всего числа, если нужно просто определить факт разности одного разряда двух разных чисел - не пойму.
0
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 22:08 #22
Как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int cmp(const char * a, const char * b){
    int len1 = strlen(a), len2 = strlen(b);
    
    if (len1 > len2)
        return 1;
    if (len2 > len1)
        return -1;
    
    for (int i = 0; i < len1; ++i)
    {
        if (a[i] > b[i])
            return 1;
        if (a[i] < b[i])
            return -1;
    }
    return 0;
}
0
talis
793 / 545 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 22:10 #23
diagon, как вариант. Но опять же - вы возвращаете 1, 0 и -1 - хватит знакового однобайтового, char, а у вас целых 4 байта, int.
0
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.08.2011, 22:14 #24
Цитата Сообщение от talis Посмотреть сообщение
diagon, как вариант. Но опять же - вы возвращаете 1, 0 и -1 - хватит знакового однобайтового, char, а у вас целых 4 байта, int.
А зачем эта экономия? 3 байта никакой роли не сыграют. И char прежде всего ассоциируется с символом, поэтому код станет немного сложнее понять. Я вообще хотел использовать short, но вспомнилось с баша
philpirj@habr: каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти
0
talis
793 / 545 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 22:17 #25
Ну сделайте так:

C
1
2
3
4
typedef char byte;
 
byte strcmp( char * str1, char * str2 )
//...
А вообще, от всей души желаю вам докупить планку памяти и собрать комп своей мечты
0
14.08.2011, 22:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2011, 22:17
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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