Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Массив в число

6.8K
03 октября 2007 года
bolt90
80 / / 25.01.2007
Привет. Можно ли както массив выразить одним числом, всмысле что бы в одну переменную можно запихнуть последовательность цифр в массиве? язык си.
489
04 октября 2007 года
NeO_u
277 / / 11.10.2006
Ну, как вариант: 119 = 100+10+9, и т.д. - это если ты хочешь в интовую переменную пихать массив, а можешь еще запихнуть например в стрингу string str=""; str+=int;

ЗЫ: рабочего примера под рукой нет. но реализация там довольно проста.
247
04 октября 2007 года
wanja
1.2K / / 03.02.2003
Ну, смотря какой массив и в какое число. Поконкретней нельзя?
32K
04 октября 2007 года
uzz
7 / / 03.10.2007
из чего состоит массив? какого он размера? что тебе нужно получить в итоге: целое число, или быть может строку?
13K
04 октября 2007 года
specter
113 / / 28.09.2007
Цитата: bolt90
Привет. Можно ли както массив выразить одним числом, всмысле что бы в одну переменную можно запихнуть последовательность цифр в массиве? язык си.


Если чисел не много и они влезут в переменную, то можно... Если вспомню каким кастом это сделать, то напишу ;)

276
04 октября 2007 года
Rebbit
1.1K / / 01.08.2005
В общем случае нельзя. Но как сказал уже specter.......
Предположим у тебя есть масив из 5 положительных чисел максимуальное значение которых - 49. Тебе надо их загнать в 32-битное целое. Проверяем так: от 0 до 49 есть 50 разных вариантов одного числа.
Поднимаем 50 в степень 5 (количество цифр) = 312500000
2 в степени 32 = 4294967296 что больше 312500000. Значит можно. Если меньше - нельзя.
Запихивать будем примерно так (я без компилятора пишу, проверь):
 
Код:
long r = 0;
  for (int i = 0; i < 5; ++i){
    r = r * 50;
    r = r + arr;
  }
Обратно в масив

 
Код:
for (int i = 4; i >= 0; --i){
    arr = r % 50;
    r = r / 50;
    r = r + arr;
  }
Также можно паковать побитово со сдвигом, но емкость результата будет меньше.
Все вышесказаное относилось к варианту когда надо возобновлять данные в масив. Если возобновлять не надо - можно использовать хеш
13K
04 октября 2007 года
specter
113 / / 28.09.2007
Мне так кажется, что ему нужно что-то вроде однобайтового массива перегнать в лонг...

Вобщем ждем более подробных объяснений от автора ;)
1.6K
04 октября 2007 года
Vov4ick
476 / / 01.02.2007
А мне кажется что этот ребус о функции sscanf
[COLOR="Red"]Автор, помни! Не все люди обладают телепатическими способностями![/COLOR]
6.8K
05 октября 2007 года
bolt90
80 / / 25.01.2007
впринципе все поняли правильно (извиняюсь за неточность, спешил :o ), масив из n елементов (чисел диапозона 0-9) записать в виде целого числа (один елемент соответствует одному разряду)
1.6K
06 октября 2007 года
Vov4ick
476 / / 01.02.2007
посмотри справку по sscanf. Скорее всего тебе нужно это.
263
06 октября 2007 года
koltaviy
816 / / 16.12.2004
А мне кажется человеку нужно вот это:
 
Код:
..
long result;
for( int i = 0; i < n; i++ )
{
       result += arr[ i ] * pow(  10, ( n - i - 1)  );
}
..

Честно скажу, не помню функцию возведения в степень в C - поэтому написАл pow - при необходимости, естсно, заменить!!
А вообще тема явно напрашивается в "Студентам"!!
247
07 октября 2007 года
wanja
1.2K / / 03.02.2003
Можно обойтись и без pow
 
Код:
long result;
for( int i = 0; i < n; i++ )
       {
       result = result*10+arr[ i ];
       }
263
07 октября 2007 года
koltaviy
816 / / 16.12.2004
Цитата: wanja
Можно обойтись и без pow
 
Код:
long result;
for( int i = 0; i < n; i++ )
       {
       result = result*10+arr[ i ];
       }


result забыли обнулить ;)
У тя лучше! :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог