Какая логика в этом коде? - PullRequest
       4

Какая логика в этом коде?

0 голосов
/ 18 сентября 2011

Мне трудно понять следующий код:

if ((number % 10)> max) //rem of 10
{
    max = (number % 10);
}
number /= 10;

Не могли бы вы помочь мне с этим?

Ответы [ 4 ]

3 голосов
/ 18 сентября 2011

Полагаю, код, который вы разместили, - это тело цикла, например:

int max = 0;
while (number != 0) {
    if (number % 10 > max) {
        max = number % 10;
    }
    number /= 10;
}

Этот цикл находит наибольшую десятичную цифру числа. Например. если number==152, вы получите max==5 после цикла.

1 голос
/ 18 сентября 2011

Если последняя цифра number больше max:

if ((number % 10)> max)

Тогда max равна последней цифре

max = (number % 10);

Удалить последнюю цифру

number /= 10;

Когда вы поместите это в цикл, вы сможете найти самую большую цифру в number.

1 голос
/ 18 сентября 2011
  • (number % 10), дает остаток number при делении на 10.
  • (number % 10) > max, означает, что остаток больше * max.

Таким образом, если остаток больше max, они делают max остаток как:

       max = (number % 10); 

И number/=10 является сокращением

 number = number/10; //same as number /= 10;

, котороеделит number на 10 и сохраняет частное в number.

Также есть и другие сокращения в C ++:

 a += x; // a = a + x;
 a -= x; // a = a - x;
 a *= x; // a = a * x;
 a %= x; // a = a % x; //if a and x are integral type, if they're built-in type.

Если тип a является классом,тогда вы можете перегрузить все эти операторы для вашего класса.

0 голосов
/ 18 сентября 2011

Следующий код выполняет ту же работу, но более понятным способом. Он также работает быстрее, так как количество делений, которые являются вычислительно дорогими, сведено к минимуму (каждое % в вашем коде неявно включает в себя деление).

// given: a positive integer 'number'
// sought-for: the maximum decimal digit in 'number'
int maxReminder = 0;
while (number != 0) {
    // find the quotient of the division of 'number' by 10
    int divQuotient = number/10;
    // find the reminder of the division above
    int divReminder = number - divQuotient*10;
    if (divReminder > maxReminder) {
        // 'divReminder' is the new maximum reminder
        maxReminder = divReminder;
    }
    // prepare for the next iteration
    number = divQuotient;
}
// 'maxReminder' now holds the sought-for
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...