последняя единица
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    правила раздела Алгоритмы
  
| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) | 
    последняя единица
    
  | 
         
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Есть задачка 
        
      Заменить последнию единицу в двоичном представлении числа на 0 число INT для 45 101101 ответ 101100. всебы ничего но 1 условие, блин. Не используя циклов! у меня только рекурсией получилось, может можно как по другому. if if if тоже глупо...  | 
    
| 
         
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          и так для каждого, бита пока на 1 не упрусь  >:( 
        
      вот тебе и цикл.  | 
    
| 
         
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          если б первую...  
        
      ![]() А так -- пока вижу только 1) развернуть цикл или 2) спрятать его в рекурсию     | 
    
| 
         
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          1: 
        
      int chislo = 45; chislo &= 0xfffffffe; 2: int chislo = 45; if( chislo \% 2 )chislo--;  | 
    
| 
         
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          у меня получилось! 
        
      скину решение, на днях, может кто подумать хочет ![]() красивое решение   всего несколько операций   | 
    
| 
         
         
         
          
           Сообщ.
           #6
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Нафига там рекурсия?   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #7
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          2WinterMute 
        
      не нето, надо не только для 45 45 - 44 1024 - 0 1025 - 1024  | 
    
| 
         
         
         
          
           Сообщ.
           #8
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Пришлось подумать  
        
      ![]() c = с & !(!c+1) ![]()  | 
    
| 
         
         
         
          
           Сообщ.
           #9
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          2Visitor 
        
      круто ![]() но ты наверное хотел с = с & ~(-c) :) мое решение с = с - ( с & ( -с ) ) на 1 с больше ![]() а с первой тоже неплохая задачка   надо подумать  >:(   | 
    
| 
         
         
         
          
           Сообщ.
           #10
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          ну да, сорри, ~, пойду Си вспоминать  
        
          | 
    
| 
         
         
         
          
           Сообщ.
           #11
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата  если б первую...   Почему, это вызвало такую легкость ? Не могу найти решения :-/  | 
    
| 
         
         
         
          
           Сообщ.
           #12
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          С певой там немного другие операции, не битовые  
        
        Логарифм.   | 
    
| 
         
         
         
          
           Сообщ.
           #13
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          WinterMute уже ответил: 
        
      INT ClearLeastBit(INT value) { return value & (int)-2; } Неверящие могут проверять   	  | 
    
| 
         
         
         
          
           Сообщ.
           #14
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          2 trainer 
        
      ![]() ![]() <br> 101001010111<br>=<br> 101001010110<br><br><br><br> 010101110000<br>=<br> 010101100000<br><br><br><br> 101100101000<br>=<br> 101100100000<br><br><br><br> 110100101010<br>=<br> 110100101000<br> я понятно объяснил ?  | 
    
| 
         
         
         
          
           Сообщ.
           #15
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Дык не разряд последний, а единицу последнюю. И еще в условии забыли слово "только"  
        
          |