簡體   English   中英

檢查數字中每個數字的出現

[英]Check occurance of each digit in a number

這是一個檢查數字中每個數字出現的代碼,除非輸入數字中有一個或多個 0,否則它可以正常工作。 有人能指出錯誤嗎?

$input_num = ($_POST["number_text"]);
$freq = array();
for($i=0; $i<10; $i++) {
    $freq[$i] = 0;
}
for($k = 0; $k <= strlen($input_num); $k++) {                           
    $last = $input_num % 10;
    for($j = 0; $j < 10; $j++) {
        if($last == $j) {
            $freq[$j]++;
        }
    }
    $input_num /= 10;
}
print_r($freq);

這里有幾個問題:

$input_num /= 10;

這不會像你期望的那樣做。 您每次都試圖刪除字符串的最后一位數字,但您所做的只是除以 10,從而產生一個浮點數。 如果你傳入12345 ,你最終不會得到1234 ,而是得到1234.5

如果你使用

$input_num = substr($input_num, 0, -1);

那么你應該得到你想要的。

另一個問題是你的循環條件:

$k <= strlen($input_num);

因為您同時增加$k的大小並減少字符串的大小,所以您最終會在中間相遇,並且只處理一半的字符串。 您需要預先存儲長度,而不是在每次迭代時計算它:

$length = strlen($input_num);
for($k = 0; $k < $length; $k++) {

正如其他人在評論和答案中所說的那樣,您可以對此進行其他優化(例如,刪除內部循環),但這仍然接近您原來的“算法”。 在 PHP 中有更簡潔的本地方法可以做到這一點,但我認為您有意避開這些方法。

為什么不使用substr_count來計算每個數字?

$input_num = '00223555';
$freq = [];

for ($i = 0; $i < 10; $i++) {
   $freq[$i] = substr_count($input_num, $i);
}

例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM