int i = 30;
int j = 1;
while(i > 0)
{
    j *= i;
    i--;
}
此程序用来求30阶乘,为什么while循环里面不可以写成while(i-- > 0)呢?

解决方案 »

  1.   

    int i = 31; 
    int j = 1; 
    while(--i > 0) 

        j *= i; 
    }
      

  2.   

    while(i > 0) 意味着当i=0时,就不循环了。而while(i-- > 0)意味着,当i=1时可以执行循环,但到循环里时 i 就等于零了。
      

  3.   

    当你i遍历到1时,i-- > 0这个值为true,执行完i-- > 0这个比较后i=0,再执行j *= i,不等于0就出问题了呵呵
      

  4.   

    (i-->0)中i--表达式的值,做--之前的i值.
    当循环到i的值是1时,i--的值 是1,i的值是0.循环还要断续,结果把0乘到j里去了。--i不一样,--i表达的值是做--这后i的值 。
      

  5.   

    楼主可以写
    while(--i > 0)因为 i--是先赋值后运算
    而--i是先运算后赋值但是,无论是用楼主的方法,还是用
    while(--i > 0)
    都会造成数据溢出
    即便你把 j 定义成long型