求2个数相除的循环节

要求:给定2个数(整数或小数均可),相除得到结果,如果结果有循环节,请打印出其循环节。

<?php
// 求$num1/$num2的循环节
function getAnswer($num1, $num2, &$result = [], &$hash = []) {
    $num1 = ftoi($num1);
    $num2 = ftoi($num2);
    $z = (int)($num1/$num2);
    $yushu = $num1%$num2;
    // 若余数为0,则除尽,无循环节,返回false
    if (!$yushu) {
        return false;
    }
    // 将除得的整数结果存起来
    $result[] = $z;
    // 判断余数是否重复出现过,如果出现过,说明循环节已经重新开始了新一轮,返回循环节
    if (isset($hash['_' . $yushu]) && $hash['_' . $yushu]) {
        $length = count($hash);
        return array_slice($result, count($result)-$length);
    }
    else {
        $hash["_" . $yushu] = true;
        // 将余数乘10,得到刚好比除数大的整数
        while ($yushu < $num2) {
            $yushu *= 10;
            // 如果余数乘10之后还是小于除数$num2,则结果需要增加一位0
            if ($yushu < $num2) {
                $result[] = 0;
            }
        }
        // 递归调用该函数求得答案
        return getAnswer($yushu, $num2, $result, $hash);
    }
}
// 将小数转换为整数
function ftoi($num) {
    $sNum = $num + '';
    if (!strpos($sNum, ".")) {
        return $num;
    }
    else {
        $num *= 10;
        return ftoi($num);
    }
}

$res = getAnswer(0.000218,0.7);
var_dump($res);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 2,714评论 0 5
  • 定点小数运算 来自:http://www.eepw.com.cn/article/17893.htm 在DSP世界...
    郝宇峰阅读 9,460评论 0 2
  • object-c 的多继承Objective-C不支持多继承,由于消息机制名字查找发生在运行时而非编译时,很难解决...
    桃逸阅读 199评论 0 1
  • 第一眼看到这只小刺猬就想要画它,真的动笔其实也是鼓足了勇气的,不知道该怎么开始,怕自己半途而废,断断续续半个多月,...
    DreamH阅读 159评论 0 2
  • 早上跟一个朋友聊天,说起自己离职了,尚未找到合适的去处,在我透露了自己对下一份工作的期待时,她跟说“你没必要不赚这...
    子菡阅读 940评论 0 0