我需要为自定义计算定义新的数字基数,
我有一个11个字符的订单列表(比如a,h,k,d,e,f,g,z,i,j,m)
我希望能够对它们执行数学任务,就像它们是数字基础一样.
例如,h = k,a k = d,j = m等……
这可能吗?
我想到的最好的方法是采用11的常规基数,并在计算之前和之后替换所有的字符(因此j实际上是9 = a然后a将被转换为m).
这种方式效率不高但会起作用.
有更好的想法吗?
谢谢.
解决方法:
PHP提供本机执行十进制,八进制,十六进制和二进制数的数学运算.如果要使用其他类型的数字系统进行计算,则需要将它们转换为上述类型之一.
基本上你使用的是base11号码系统 – 有自定义数字. PHP提供函数base_convert()来在具有不同基础的系统之间转换数字.有了这个,你只需要将自定义数字转换为base11,然后将base11转换为十进制,然后计算然后将其转换回来.
Hackish!,但它可以这样做.
function add($a, $b) {
$custom_digits = 'ahkdefgzijm';
$base11_digits = '0123456789A';
// translate custom numbers to base11
$base11_a = strtr($a, $custom_digits, $base11_digits);
$base11_b = strtr($a, $custom_digits, $base11_digits);
// translate base11 numbers to decimal
$decimal_a = base_convert($base11_a, 11, 10);
$decimal_b = base_convert($base11_b, 11, 10);
// Do the calculation
$result = $decimal_a + $decimal_b;
// Convert result back to base11
$base11_result = base_convert($result, 10, 11);
// Translate base11 result into customer digits
return strtr($base11_result, $base11_digits, $custom_digits);
}
永远不要忘记!:
h + h == k