Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2012, 21:27   #1
pavelitel
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 21
Сообщение Запись большого числа в переменную

Доброе время суток.. помогите пожалуйста у меня есть 22-значное число.
в какой тип переменных его поместить? long long int записывает 19 чисел...
unsigned long long 20... а вот что бы записать 22, я не знаю вот число 4958439238923098349024
pavelitel вне форума Ответить с цитированием
Старый 26.11.2012, 21:32   #2
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Как в int'овую переменную записать понятия не имею, но если не найдёте решение, то запишите символьной строкой (если позволяет задача) или поразрядно в несколько int'ов
Blind Guard вне форума Ответить с цитированием
Старый 26.11.2012, 21:37   #3
pavelitel
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Blind Guard Посмотреть сообщение
Как в int'овую переменную записать понятия не имею, но если не найдёте решение, то запишите символьной строкой (если позволяет задача) или поразрядно в несколько int'ов
Понимаете, в задаче есть три переменных и нужно вывести наибольшее, проблема только в том что там стоит что число не должно превышать pow(10,100) и для примера есть это число, и его нужно вывести, его не как не поделить(
pavelitel вне форума Ответить с цитированием
Старый 26.11.2012, 21:40   #4
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Т.е. наибольшее число, возможное в задаче это 1 c сотней ноликов?
Blind Guard вне форума Ответить с цитированием
Старый 26.11.2012, 21:44   #5
pavelitel
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Blind Guard Посмотреть сообщение
Т.е. наибольшее число, возможное в задаче это 1 c сотней ноликов?
да.. но в примере так
ввели например 189285 283 4958439238923098349024 оно вывело
4958439238923098349024
pavelitel вне форума Ответить с цитированием
Старый 26.11.2012, 21:51   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

pavelitel

ввели например 189285 283 4958439238923098349024 оно вывело
4958439238923098349024


можно либо работать со строками, поскольку у тебя не требуется каких либо арифметических действий.

сравнивать сначала длины строк, при совпадении - сами строки.

или, если по-суръезному - использовать любую из библиотек длинных чисел (или написать свою)
Rififi вне форума Ответить с цитированием
Старый 26.11.2012, 21:53   #7
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

ну так можно сделать ввод в строку,
потом считывать длину строки (с помощью ф-ции strlen),
затем вывести самую длинную строку в случае если она такая одна, а если 2 и более строки одинаковой длины, то сравнивать первые элементы, переводя их в int'овые переменные.
Blind Guard вне форума Ответить с цитированием
Старый 26.11.2012, 23:38   #8
pavelitel
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Blind Guard Посмотреть сообщение
ну так можно сделать ввод в строку,
потом считывать длину строки (с помощью ф-ции strlen),
затем вывести самую длинную строку в случае если она такая одна, а если 2 и более строки одинаковой длины, то сравнивать первые элементы, переводя их в int'овые переменные.
а как сравнить первые элементы переводя их в int?
pavelitel вне форума Ответить с цитированием
Старый 27.11.2012, 04:59   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

ничего в int не нужно переводить. '9' - '5' == 9 - 5, т.е. вполне можно сравнивать и символы между собой. Алгоритм сравнения банальный, как в школе столбиком считали (сравнение разрядов справа налево). Если не рассматривать отрицательные числа и записывать их в строку задом-наперёд, то и strcmp успешно сравнит числа одинаковой длины.
ЗЫ. Можно заморочиться на тему сравнения: 00000000000005 vs 10000000000005. Оптимизация в первоначальном сравнении длин тут уже выдаст неверный результат.
pu4koff вне форума Ответить с цитированием
Старый 27.11.2012, 10:48   #10
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от pavelitel Посмотреть сообщение
а как сравнить первые элементы переводя их в int?

Код:
//Функция перевода одного char'a в один int 

int translate (char c)
{
  int a;
  switch(c):
  {
    case '0' : a=0; break;
    case '1' : a=1; break;
    case '2' : a=2; break;
    case '3' : a=3; break;
    case '4' : a=4; break;
    case '5' : a=5; break;
    case '6' : a=6; break;
    case '7' : a=7; break;
    case '8' : a=8; break;    
    case '9' : a=9; break;
    default : cout << "Число содержит посторонние символы"; break;
   }
   return a;
}

/* Проверку на содержание в строке не числовых символов лучше сделать сразу после ввода, а не в процессе сравнения. 

Применить функцию перевода (translate) можно примерно так:
Допустим у тебя 2 числа str1 и str2(в виде массива символов) с одинаковым количеством разрядов.
Если разрядов будет неравное количество, то большее число можно узнать по длине строки. */
...
for(int i=0;i<strlen(str1);i++)
{
  if(translate(str1[i]) > translate(str2[i]))
  {  cout << "Первое число больше"; break; }
  if(translate(str1[i]) < translate(str2[i]))
  {  cout << "Второе число больше"; break; }
// В случае равенства цикл продолжается и сравниваются следующие разряды
}

Последний раз редактировалось Blind Guard; 27.11.2012 в 11:04.
Blind Guard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись большого фрагмента текста в таблицу БД Esigns SQL, базы данных 4 22.07.2012 22:49
Факториал большого числа Аруми Помощь студентам 2 08.11.2011 14:48
Перевод в строку большого числа RIO Общие вопросы C/C++ 0 23.05.2010 23:51
Запись в один файл большого количества информации pregmatch Общие вопросы C/C++ 5 09.03.2009 14:09
Запись большого файла на 2-ва DVD Rembo Софт 32 14.02.2009 16:02