За последние 24 часа нас посетил 56931 программист и 1795 роботов. Сейчас ищут 929 программистов ...

Увеличить разряд числа

Тема в разделе "PHP для новичков", создана пользователем ShamahN, 5 авг 2010.

  1. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Допустим, есть число 6193040000000
    Нужно увеличить последний значащий разряд на единицу, чтобы получилось 6193050000000.
    Естественно, если будет 6193090000000, должно получиться 6193100000000.
    Вообще это сделать я и сам могу, но мне нужен самый быстрый способ, ибо ибо эта фигня будет крутиться в циклах с до 10^6 повторений.
    У кого какие идеи ? =)
     
  2. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Самый быстрый пока:
    Код (Text):
    1.     static public function kode_in_coverage($code, $coverage ) {
    2.         $digits = preg_replace("#[0]+$#","", $coverage);
    3.         $coverage_max = str_replace($digits, $digits+1, $coverage);
    4.         return ($code>=$coverage && $code<$coverage_max);
    5.     }
    Но оно мне не нравится. Переменные слишком неопределенные. То число, то строка
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а что, битовые операции не прокатили?
     
  4. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    igordata
    а расскажи плз. Я не в курсе что это такое
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    блин я их сам не люблю.

    и еще я не очень понимаю, что ты хочешь. =)

    http://php.net/manual/en/language.operators.bitwise.html

    ты хочешь менять именно ту цифирьку, которая не нолик первая справа? А где это вобще такое понадобилось? нарочно не придумаешь...
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в двоичной системе тебе было бы очень просто жить...
    а что с твоими десятеричными ноликами делать - не ясно.
     
  7. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    очень легко придумаешь. Наш чудесный российский кладр видел? Вот там мне и надо. Надо проверять, соответствуют ли коды родителю
    Ну, на пальцах
    код родителя
    10
    Он может иметь детей
    11 12 13 14 15 16 17 18 19
    Все.. Остальные не его =)
    Так вот, мне надо проверить, соответствует ли ребенок родителю. В нашем случает ребенок должен быть
    x>10 и x<20
    Все просто) но в кладре коды подлиннее
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не вкурил темку тогда. зачем на единицу-то увеличивать? так сравнивай =)

    распиши подробнее, может кто завтра отпишется.
     
  9. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    ShamahN
    приколись перепиши свою функцию на С++, запихай как расширение в php и сравни скорость =)
     
  10. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    нельзя) допустим 21, - больше 10, но он будет уже ребенком кода 20
    Просто не знаю как уже подробнее расписать..
    А в побитовых операциях что-то есть) Буду думать
    вот только 32-х разрядов мне не хватит, наверное для 15-ти разрядного десятичного числа.
    Мде..
    10001010101100101010110001010100000010000000000000
    явно не хватит
     
  11. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Padaboo, это называется наркомания =) не по мне ;)
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ShamahN
    а почему так много будут они проверяться все адреса каждый раз по новой миллион раз в секунду?
     
  13. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    igordata, не очень часто. Раз в месяц в среднем =) Адрес составной КодРегиона,КодРайона,КодГорода,КодНаселенногоПункта,КодУлицы
    Один адрес - 5 кодов. 200к адресов - 1кк кодов ;)
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    надо подумать.

    может работать с ним как с байтовым массивом?

    и почему ты идешь с конца? распиши всю структуру этого гребаного кода.

    может там быть чтобы у 37 папа был не 3 а 2
    т.е. с 20 по 39. или никогда так не будет?
     
  15. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    PHP:
    1. $nulls = 10;
    2.  
    3. while(!($number % $nulls)) { $nulls *= 10;}
    4.  
    5. $newnumber = (($number / $nulls) + 1) * $nulls;
    пых гавно в подобных вещах конечно, но это должно работать быстро. только я не проверял, это ИДЕЯ а не реализация, реализацией сами :) дел много :-!
     
  16. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    igordata
    Структура кода
    ФФРРРГГГНННУУУУ
    ФФ - Код региона
    РРР - Код района
    ГГГ - Код города
    ННН - код нас. пункта
    УУУУ - код улицы

    Так вот если у тебя есть улица с кодом 610000040000010 (улица на которой я живу) это значит, что у региона в котором эта улица
    код региона 610000000000000
    района нет
    Код города
    610000040000010

    Моя задача, для целой куче адресов проверить, что они соответствуют какой-либо области (зоне)
    А именно, принадлежит ли улица 610000040000010 зоне с кодом 610000000000000


    , спасибо... Попробую вникнуть =)
     
  17. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    ShamahN
    да просто берем число 10, если на него делится без остатка, умножаем на 10 это число, проверяет делится ли на 100, если делится еще умножаем и так пока не перестанет делиться :)

    кстати, если у тебя возможен вариант исходного числа - только нули, то тут надо добавить whil($number && !(то условие)), а то в бесконечность уплывешь :)
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я понимаю, что ты хочешь сделать, но не понимаю, зачем для этого увеличивать что-то. =)

    что тебе мешает брать одну цифру и ее сравнивать с эталоном?
     
  19. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    phpdude
    станная логика ;) если число делилось на 10, то после умножения на 10 оно точно будет делиться на 100 =)
    цифра 610000040000010
    эталон 210000000000000
    Как их сравнить ?=)
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык походу, раз регион не тот, то уже полюбому не оно, не?

    обрисуй алгоритм русским языком.
     
  21. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    умножаем то 10 НА 10, а не число .... ух я в гневе)
     
  22. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    igordata
    усложняем
    код улицы
    020090000540004
    Код зоны
    020090010000000

    Принадлежит улица зоне?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    смотря какая зона тебя интересует.

    это другой город в том же регионе в том же районе.


    нужно знать не только эталонную маску, но и насколько точное должно быть совпадение.
     
  24. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    igordata
    Мне нужно знать, принадлежит ли улица зоне. Зоной может быть как регион, так и населенный пункт.
    В общем, закрываем пока тему =) Реализация меня пока устраивает, если будут проблемы - будем придумывать искусственные методы =) Спасибо за активное участие
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ShamahN
    да погоди ты закрывать. ты не один с кладром сталкиваешься


    суть: что есть зона? =)