Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединение нескольких чисел в одно, почти что как найти сумму нескольких чис 
:(
    Опции темы
relok
Дата 15.11.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.11.2010

Репутация: нет
Всего: нет



здравствуйте
даны три интовых числа - к примеру 97 97 97 (в общем по аски 0...255)
реально ли их как то объединить в 979797 (девятьсот семьдесят девять тысяч, семьсот девяносто семь) покрасивее?

в голову приходит не очень красиво:

берем первое число, считаем сколько знаков в остальных и умножаем первое на 10 ^ кол-во знаков
1. 97*10000=970000
2. берем второе число и умножаем на десять в степени количество знаков в третьем
  97*100=9700
3. складываем получившиеся числа 
    970000 + 9700 + 97 = 979797

я бы погуглил, да не представляю как назвать это=) 

о. написал это и придумал такой вопрос: реально ли узнать, сколько знаков в числе(без проверок типа 0...9 10...99 100...255?) 
тогда всё проще : 99 + 98*10^(знаков(99)) + 97*10^(знаков(98)+знаков(99))=979899

Это сообщение отредактировал(а) relok - 15.11.2010, 22:20
PM MAIL   Вверх
bsa
Дата 15.11.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



тебе нужно получить число или строку?
Для строки все просто: sprintf(buffer, "%i%i%i", num1, num2, num3);
Для числа сложней:
Код
static const int num[] = {91, 92, 93};
int res = 0;
int i = 0;
for(;;) {
   res += num[i];
   if (++i >= 3)
      break;
   for(int j = 10;; j *= 10) {
      if (j > num[i]) {
         res *= j;
         break;
      }
   }
}

PM   Вверх
relok
Дата 15.11.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.11.2010

Репутация: нет
Всего: нет



ну это тоже не очень красиво
просто реализовать можно многими способами

а я хотел что-то красивое, может даже встроенное

не очень понятно, что вы написали+) я сделал так

int chislo(unsigned char ch)
{
    int n=ch;
    if((n>=0)&(n<10)) return 1;
    if((n>9) &(n<100)) return 2;
    if((n>99))            return 3;
}

c=msg[0]+msg[1]*pow(10,chislo(msg[0]))+msg[2]*pow(10,(chislo(msg[1])+chislo(msg[0])));
       97    +   97    *  10^2                          + 97      *   10^(2+2)

если нужно будет больше трех чисел, подогнать всё в фор не сложно думаю)

но это не эстетично, как то по деревенски)
PM MAIL   Вверх
mes
Дата 15.11.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(bsa @  15.11.2010,  21:59 Найти цитируемый пост)
Код

static const int num[] = {91, 92, 93};
int res = 0;
int i = 0;
for(;;) {
   res += num[i];
   if (++i >= 3)
      break;
   for(int j = 10;; j *= 10) {
      if (j > num[i]) {
         res *= j;
         break;
      }

так вроде чуть проще :
Код

static const int num[] = {91, 92, 93};
int res = 0;

for (int i=0; i<3; ++i) { 
   if (i) 
   { int j=10;
     for(; j<num[i]; j *= 10);
     res *=j;          
   }
   res += num[i];
}



Добавлено @ 23:29
Цитата(mes @  15.11.2010,  22:26 Найти цитируемый пост)
   if (i) 

или if (res).. также  если планируется "пристегнуть" к уже существующему числу .. т.е. для изначального int res = some_value;

Добавлено через 8 минут и 39 секунд
Цитата(relok @  15.11.2010,  22:11 Найти цитируемый пост)
но это не эстетично, как то по деревенски) 

оберните в функцию принимающую массив и отдающую результат и будет не по деревенски smile

Добавлено через 10 минут и 35 секунд
Цитата(mes @  15.11.2010,  22:26 Найти цитируемый пост)
     for(; j<num[i]; j *= 10);

или так : while(j<num[i]) j*=10;

Это сообщение отредактировал(а) mes - 15.11.2010, 23:30


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0460 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.