【问题标题】:What is the logic in this code?这段代码的逻辑是什么?
【发布时间】:2011-09-18 07:20:54
【问题描述】:

我很难理解以下代码:

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

你能帮我解决这个问题吗?

【问题讨论】:

  • 您不了解if 的工作原理或运营商的工作吗?解释你想要达到的目标。
  • % 给出余数,number /= 10number = number/10 相同

标签: c++ logic


【解决方案1】:

我猜你发布的代码是循环体,像这样:

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

此循环查找数字的最大十进制数字。例如。如果number==152,则循环后会得到max==5

【讨论】:

    【解决方案2】:

    如果number的最后一位大于max

    if ((number % 10)> max)
    

    那么max等于最后一位

    max = (number % 10);
    

    去掉最后一位

    number /= 10;
    

    当你把它放在一个循环中时,它会让你找到number中的最大数字。

    【讨论】:

      【解决方案3】:
      • (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 的类型是类,那么您可以为您的类重载所有这些运算符。

      【讨论】:

        【解决方案4】:

        以下代码执行相同的工作,但方式更易于理解。它还运行得更快,因为计算成本高昂的除法数量被最小化(代码中的每个% 都隐含地包含一个除法)。

        // 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-31
          相关资源
          最近更新 更多