如何在php中定义数字的自定义基数?

我需要为自定义计算定义新的数字基数,

我有一个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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...