2015-12-02 54 views
0

我想寫一個算法來找到GCD(最大公約數),但我的函數的結果是Array我做錯了!請不要另一個aproche或一個準備算法copie過去我想知道我在做什麼錯試圖找到使用php函數返回數組的gcd?

<?php 

function pgcd($val1, $val2){ 

    if (!is_numeric($val1) || !is_numeric($val2)){ 

     return null; 
    } 

    $i = 1; 
    $final = array(); 

    while($i <= min($val1, $val2)){ 

     if ($i % $val1 === 0 && $i % $val2 === 0){ 
      $final[] = $i; 

     } 

     $i++; 
    } 

    return $final; 
} 

echo pgcd(120,420); 

?> 
+0

你在做什麼錯誤是試圖回顯一個數組..... var_dump或print_r或遍歷它並回顯值 –

+0

你的數組返回的是__all__公共分母......你會然後需要對該數組進行排序(從最小到最大),然後彈出最後一個值,這將是GCD –

+0

如果您不是僅僅爲了練習而編寫此函數,則可以查看[GMP](http: //php.net/manual/en/book.gmp.php)擴展,更確切地說它提供了[gmp_gcd](http://php.net/manual/en/function.gmp-gcd.php)函數。 – mrun

回答

2

首先:你想找到gcd或所有的普通除數? 如果是gcd,那麼你的代碼中有一些錯誤:
1)將$final = array();替換爲$final = null;return $final;替換return $final[0];;
2)將if ($i % $val1 === 0 && $i % $val2 === 0)替換爲if ($val1 % $i === 0 && $val2 % $i === 0);
3)用$final = $i代替$final[] = $i;;
OR:
1)將if ($i % $val1 === 0 && $i % $val2 === 0)替換爲if ($val1 % $i === 0 && $val2 % $i === 0);
2)用return max($final);代替return $final;;

0

返回$ final是一個數組。對於打印數組,使用print_r(YOUR_VALUE)。如果你使用'回聲'你可以只打印字符串值,而不是數組;

+0

同樣的故事我得到Array() – Mouheb

+0

這是因爲你的條件是不執行 如果($ i%$ val1 === 0 && $ i%$ val2 === 0)並且返回空數組。所以程序寫你陣列(),因爲他是空的...嘗試使用var_dump,你會看到 –