首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这是什么类型的数学或编程问题

这是什么类型的数学或编程问题
EN

Stack Overflow用户
提问于 2019-01-05 14:58:05
回答 1查看 40关注 0票数 0

我已经解决了这个问题(参见下面的代码),但是我没有一个令人满意的名称来命名结果function.Also,我想更广泛地探讨这个问题,但我不知道我在搜索什么。我试过“循环数学”,“时钟问题”,我甚至记得单子被用来解决这个原则,但我找不到我在哪里看到的。

问题:给定一组连续的数字,这些数字像时钟1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4.. (在我的例子中是色调标尺)绕着一个圆圈走,并给出一个距离(以整数表示),我想要计算这个圆形序列上的结果数字。因此,如果一个时钟显示5,我加上9个小时,结果应该是2。

5+9=23-7=8

问题是我该怎么称呼它。下面是用PHP编写的解决方案:

代码语言:javascript
运行
复制
function circularmath($strExpression = "2+2" , $top = 355 ){
$result = 0;
if(preg_match('/^\d+[+-]\d+$/',$strExpression)){
    list($n1,$op,$n2)=preg_split('/([+-])/',$strExpression, null, PREG_SPLIT_DELIM_CAPTURE);
    $result =($op==="+")? $n1+$n2:$n1-$n2;
    if($result < 0){
        $result=$top+$result;
    }elseif($result > $top){
        $result=$result-$top;
    }
  }
 return $result;
}

$foo = circularmath("352+4");
echo $foo;
EN

回答 1

Stack Overflow用户

发布于 2019-01-06 04:51:35

感谢Thomas G和ggorlen。它实际上是模算法,它带来了更好的代码:

代码语言:javascript
运行
复制
        function mod($a, $n) {
            return ($a % $n) + ($a < 0 ? $n : 0);
        }
        function circularmath($strExpression = "2+2" , $top = 355 ){
            $result = null;
            if(preg_match('/^\d+[+-]\d+$/',$strExpression)){
                list($n1,$op,$n2)=preg_split('/([+-])/',$strExpression, null, PREG_SPLIT_DELIM_CAPTURE);
                $result =($op==="+")? $n1+$n2:$n1-$n2;
                $result = mod($result , $top) ;
            }
        return $result;
        }
        $foo = circularmath("352+4")."\n";
        echo "f:".$foo;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54049738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档