php 求解多項式

好久沒有做過算法相關的東西了,最近一個同事問了一個算法相關的問題,問題描述如下:

有這樣一組排列對應關係,26個大寫字符組成的字符串按字符序排序,短的比較小

A=>1,B=>2,。。。Z=>26,AA=>27,。。。AZ=52  。。。

現在給出數字m,要找出對應的字符串是什麼,如下

1 => A , 27 => AA ...

這個問題比較熟悉,以前遇到過,不過當時自己怎麼解決的就想不起來了。

現在的解法如下:

大致思路

10進制變26進制

多項式 :m = x1*26^n + x2*26^n-1+...+xn*26^0(注意:1<=  xi <= 26)

代碼:

<?php
$a = intval($argv[1]);

function ans($a)
{
    $arr = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $res = 0;

    $len = strlen($a);
    for($i = 0; $i<$len; $i++) {
        $res = $res*26 + (ord($a[$i]) - ord('A') + 1);-
    }   
    return $res;
}

function func($a)-
{
    $arr = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $res = ''; 

    while($a > 0) {
        $x = $a%26;
        if($x == 0) { #這裏要注意
            $x = 26; 
        }   

        $res = $arr[$x].$res;
        $a -= $x; #這要注意
        $a = intval($a/26);
    }   

    return $res;
}
$b = func($a);
$j = ans($b);

echo $a,"\n",$b,"\n",$j,"\n";
if($a != $j){
    echo "algorithm error\n";
}else{
    echo "succ\n";
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章