php 求解多项式

来源:互联网 发布:外文期刊数据库检索 编辑:程序博客网 时间:2024/05/29 17:45

好久没有做过算法相关的东西了,最近一个同事问了一个算法相关的问题,问题描述如下:

有这样一组排列对应关系,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";}



0 0