2010-10-24 87 views
1
function mystery($y, $m, $d) { 

    $a = 0; 
    $b = 0; 
    $c = 0; 

    if($m < 3) { 
    $a = $m + 10; 
    $b = ($y-1) % 100; 
    $c = ($y-1)/100; 
    } 
    else { 
    $a = $m - 2; 
    $b = $y % 100; 
    $c = $y/100; 
    } 

    $w = (700 + (((26*$a)-2)/10)+$d+$b+$b/4+$c/4-(2*$c))%7; 
    echo $w; 

} 

我的一個教程問題詢問函數計算的是什麼。我可以通過並解釋每一次計算,但我相信這不是我們所期望的。有沒有明顯的用處我沒有看到?這段代碼做了什麼?

它看起來對我來說,這可能是一個校驗算法,因爲它似乎總是介於0和6

PS,它最初用Java編寫的,以產生一個數字,但我把它移植到PHP爲簡單起見,當我將它輸入到我的電腦中進行測試。如果有人願意,我可以重新輸入Java版本。

+2

您測試了一些輸入嗎?例如今天的日期? – 2010-10-24 10:16:29

+1

哦,我認爲是的,是的。 0 - > 6的值是一週中的一天!謝謝! – Matt 2010-10-24 10:16:57

+0

@Marcelo - 變量Y M D應該是一個贈與。我甚至沒有注意到。 grr – mellowsoon 2010-10-24 10:20:49

回答

1

想想日期和Marcelo發佈的內容。這裏是可編譯的java。嘗試使用各種輸入來運行程序,並查看您提出的內容。

class mys { 
    public static void main(String[] args) { 
      int y= Integer.parseInt(args[0]); 
      int m= Integer.parseInt(args[1]); 
      int d = Integer.parseInt(args[2]); 
      int a = 0; 
      int b = 0; 
      int c = 0; 

      if(m < 3) { 
      a = m + 10; 
      b = (y-1) % 100; 
      c = (y-1)/100; 
      } 
      else { 
      a = m - 2; 
      b = y % 100; 
      c = y/100; 
      } 

      int w = (700 + (((26*a)-2)/10)+d+b+b/4+c/4-(2*c))%7; 
      System.out.println(w); 
    } 
}