2013-07-19 40 views
-5

我正在使用使用餘數運算符號碼是另一個的倍數。如果第一個數字是3,第二個數字是15,那麼支票號碼是另一個的數字

if (3 % 15 == 0) { 

} 

然後它的工作(不進入if)。但現在,如果第一個數字是3和第二個數字是4000,然後它不工作條件仍然爲真

if (3 % 4000 == 0) { 

} 

這不應該進入,如果情況。但這裏的條件是真實的。爲什麼這樣?

+0

不,它確實*不是真的。你誤診了它。試着想出一個簡短但完整的程序來證明問題 - 你會發現'3%4000'確實是'3'。 –

+0

給出您當前的代碼片段。 「if」條件都不會成立。我不明白你如何得到你所說的結果。 –

回答

5

如果您仔細測試您的程序,您會發現在任何情況下都不會執行if語句的正文。

原因是你有錯誤的方式%的論據。

if改爲:

if (4000 % 3 == 0) { 

%運算符返回除以第一參數由的剩餘部分。

+1

請在downvote時添加評論。因爲這個答案對我來說是正確的+1。 –

+2

這並沒有回答這個問題 - 他在問爲什麼這是真的(這不是......),這與此無關。 – Doorknob

+3

我沒有看到任何跡象表明OP真的想要找到一個模3的餘數......並且它與進入'if'(這不會發生任何一種方式)無關。 –

0

modulo division將返回A/B的剩餘部分(由B A分)

所以在這裏3%15和3%,4000等於3

0

你不能有少數被更大數量除以或餘。你有

if(3 % 4000==0){} 

所以做這種手術之前,你可以使用的方法,並通過2號給它,這將首先檢查第一個數字大於或大於數量較少比它就會相應地執行。 即

//you may change the return type. 
    void multiple(int a, int b) 
    { 
     if(a>b) 
     { 
     if(a % b == 0) 
     { 
      //TO DO Code here 
     } 
     } 
     else 
     { 
     if(b%a==0) 
     { 
      //TO DO Code here  
     } 
    } 
    } 
+0

-1:代碼要求你複製你想執行的東西,非常格式化,並且不會甚至不會跑。 – Doorknob

+0

@門把手我編輯了代碼。如果您覺得它重複,請告訴我如何刪除重複的代碼。 – artapart

+0

'if(a%b == 0 || b%a == 0){...}',但無論如何,這甚至不能回答這個問題。 – Doorknob

0

它正常工作與每個值,其餘的將永遠是3,那麼「如果」將不會執行。如果妳需要檢查0,更好的方式來寫「如果」將是,

if (!(3 % 4000)){ 
    // Code to execute 
} 

在這種情況下,當有一個餘數爲0。此外還要檢查與變量的類型,一旦只執行。

一種可能性是,如果你將其聲明爲有符號短int(0到127)並將4000存儲到它,溢出發生並且變量值將被設置爲最小值(即零(0))。所以,在你的情況下,它執行'if'。只是給你一個想法。

0

當A%B == 0則A是B的多個如果a> = B

用於< B,A永遠不會成爲一個倍數b,除非它是零