以下是我的回答:可以这样写,先用explode从分数线(/)进行分隔,分成a1,a2 b1,b2,四个数字,再算公倍数,a2*b2=c2,然后算出总的结果:(a1*b2+ a2*b1)/c2,假设得到的结果:d2/c2,再算公约。先判断分子大还是分母大,如果分母大,if(d2%c2==0){//$gy=d2/c2 //$gy就是公约。当然一定要除去1,因为大家知道1是任何数的公约数。};根据这个方法,自己写个类或函数是可以解决的。

解决方案 »

  1.   

    你要练手的话,建议你扩展下,写个纯php四则运算(20-21)*((19-(-3)*(-6))*(6-42/14)-((23-19)*8+(-1)*(-28))) = ?
      

  2.   

    大致的过程为:
    $s = '1/4+1/5';preg_match_all("#((\d+)/(\d+))([-+/*]*)#", $s, $reg);for($i=0; $i<count($reg[1]); $i++) {
      $d[] = array($reg[2][$i], $reg[3][$i]);
      $f[] = $reg[4][$i];
    }foo($d[0], $d[1]);$a = eval("return {$d[0][0]} {$f[0][0]} {$d[1][0]};");
    $y = gcd($a, $d[0][1]);echo $a/$y . '/'. $d[0][1]/$y;/** 通分 **/
    function foo(&$a, &$b) {
      $f = $a[1] * $b[1];
      $a = array($a[0] * $f/$a[1], $f);
      $b = array($b[0] * $f/$b[1], $f);
    }/**
    辗转相除求最大公约数
    **/
    function gcd($a, $b) {
      if($a % $b)
        return gcd($b, $a % $b);
      else
        return $b;

      

  3.   

    //计算两个数的最大公约数
    code=PHP]function gcd($a,$b){
    while($a != $b){
    if($a > $b){
    $a -= $b;
    }else{
    $b -= $a;
    }
    }
    return $a;
    }[[/code]
    //计算两个数的最小公倍数
    function lcm($a,$b){
    return  $a/gcd($a,$b)*$b/gcd($a,$b)*gcd($a,$b);
    }$sum = '1/6+1/4';
    $num = explode('+',$sum);
    $num1 = explode('/',$num[0]);
    $num2 = explode('/',$num[1]);
    //求和
    echo lcm($num1[1],$num2[1])/$num1[1] + lcm($num1[1],$num2[1])/$num2[1] .'/'. lcm($num1[1],$num2[1]);
      

  4.   

    //计算两个数的最大公约数
    function gcd($a,$b){
    while($a != $b){
    if($a > $b){
    $a -= $b;
    }else{
    $b -= $a;
    }
    }
    return $a;
    }
    //计算两个数的最小公倍数
    PHP codefunction lcm($a,$b){
        return  $a/gcd($a,$b)*$b/gcd($a,$b)*gcd($a,$b);
    }
    PHP code$sum = '1/6+1/4';
    $num = explode('+',$sum);
    $num1 = explode('/',$num[0]);
    $num2 = explode('/',$num[1]);
    //求和
    echo lcm($num1[1],$num2[1])/$num1[1] + lcm($num1[1],$num2[1])/$num2[1] .'/'. lcm($num1[1],$num2[1]);
      

  5.   

    上面两个都错了
    <?php
    //计算两个数的最大公约数
    function gcd($a,$b){
    if($a % $b){
    return gcd($b,$a % $b);
    }else{
    return $b;
    }
    }
    //计算两个数的最小公倍数
    function lcm($a,$b){
    return  $a/gcd($a,$b)*$b/gcd($a,$b)*gcd($a,$b);
    }$sum = '2/3+2/3';
    $num = explode('+',$sum);
    $num1 = explode('/',$num[0]);
    $num2 = explode('/',$num[1]);
    if(gcd(((lcm($num1[1],$num2[1])/$num1[1])*$num1[0] + (lcm($num1[1],$num2[1])/$num2[1])*$num2[0]),lcm($num1[1],$num2[1])) == 1){
    echo ((lcm($num1[1],$num2[1])/$num1[1])*$num1[0] + (lcm($num1[1],$num2[1])/$num2[1])*$num2[0]).'/'. lcm($num1[1],$num2[1]);
    }else{
    echo ((lcm($num1[1],$num2[1])/$num1[1])*$num1[0] + (lcm($num1[1],$num2[1])/$num2[1])*$num2[0])/gcd(((lcm($num1[1],$num2[1])/$num1[1])*$num1[0] + (lcm($num1[1],$num2[1])/$num2[1])*$num2[0]),lcm($num1[1],$num2[1])).'/'. lcm($num1[1],$num2[1])/gcd(((lcm($num1[1],$num2[1])/$num1[1])*$num1[0] + (lcm($num1[1],$num2[1])/$num2[1])*$num2[0]),lcm($num1[1],$num2[1]));
    }
    ?>