2011-09-18 135 views
0

我有一个很难理解下面的代码:这段代码的逻辑是什么?

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

能否请你帮我这个?

+1

难道你不理解'if'的工作原理或操作员的操作?解释你想达到什么。 – Mahesh

+4

那么你的问题是什么? –

+0

'%'给出余数,'number/= 10'与'number = number/10'相同 –

回答

1
  • (number % 10),给出number的余数除以10
  • (number % 10) > max,表示如果剩余量大于max

所以,如果余数是超过max更大,他们做max其余为:

 max = (number % 10); 

而且number/=10

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

速记其除以10 number,并保存在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类型为类,那么你可以重载所有这些运营商为你的类。

3

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

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

这个循环认定数的最大十进制数。例如。如果number==152,您将在循环后得到max==5

1

如果number最后一个数字大于max

if ((number % 10)> max) 

然后max等于最后一位

max = (number % 10); 

删除最后一个数字

number /= 10; 

当你把这个在循环中,让我们找到中最大的数字。

0

下面的代码完成同样的工作,但以一种更容易理解的方式。它的运行速度也更快,因为计算成本很高的部门数量被最小化(代码中的每个%隐含地涉及一个部门)。

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