2014-01-29 4 views
-4

Я ищу код для выполнения определенного действия в цикле for, когда i == некоторое значение.Как проверить, что «i» in for loop достигает определенного значения

for(int i=0; i<n; i++) 
    { 
     if (i == 300 or i == 600 or i == 900 or i == 1200 ....) 
      // then do some action 

      else 

      // do some other action .... 
    } 

Как я могу проверить это (i == 300 or i == 600 or i == 900 or i == 1200 ....)

+1

вы хотите упростить это заявление или вам просто нужно '' || оператор? –

+1

Как насчет switch (i) {case ...}? –

+1

как насчет удаления '....' и помещая что-то вместо ваших комментариев к действию, и попытаться запустить его, а затем посмотреть, что вы хотите? – PlasmaHH

ответ

15

Используйте остаток, modulus operator%, если она всегда делится на 300, это избавит вас от использования п число || условий.

for(int i = 0; i<n; i++) 
{ 
    if (i % 300 == 0) 
     // then do some action  
     else  
     // do some other action .... 
} 

Оператор% вычисляет остаток после деления его первый операнд его второй. Все числовые типы имеют предопределенные операторы остатка, MSDN.

+0

операции модуля/деления очень медленные, и затраты на подобное выполнение могут привести к снижению стоимости сравнения, когда случай размер небольшой –

+2

@ LưuVĩnhPhúc: Мы больше не в 70-х годах –

+0

@LightnessRacesinOrbit даже для современного оборудования требуется, по меньшей мере, десятки циклов для деления. Вы можете проверить таблицы команд Agner Fog, даже в Sandy Bridge, для выполнения 64-разрядного деления может потребоваться более 100 циклов. Большинство 32-разрядных разделов занимает около 15-90 циклов. За это время вы можете сделать гораздо больше сравнений –

0

Как я могу проверить это (я == 300 или я == 600 или я == 900 или я == 1200 ....)

Как это:

if (i == 300 || i == 600 || i == 900 || i == 1200 ....) 

условный оператор ИЛИ будет оценивать первое утверждение, если Tru e, весь оператор оценивает значение true, а остальные операнды не оцениваются.

0

Многие полезные решения здесь. Другой:

for(int i=0; i<n; i++) 
{ 
    switch(i) 
    { 
     case 300: 
     case 600: 
     case 900: 
     case 1200: 
      // take action 
     break; // done with positive cases 

     default: 
      // this is the 'else' side of your check 
     break; 
    } // switch 
} 
-2

Легче решением является знать, когда он кратен 300:

for (int i = 0; i < n; i += 300) 
{ 
    // Some action 
    for (j = 1 ; j < n-i; ++j) 
    { 
    // Other action 
    } 
} 
+0

Я не думаю, что это будет правильный ответ. По вопросу –