以下是我的回答:可以这样写,先用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是任何数的公约数。};根据这个方法,自己写个类或函数是可以解决的。
解决方案 »
- 关于discuz编程嵌套循环思路的问题,各位大侠请进哦
- LyftenBloggie 有谁用过啊,高手进来一下啊
- discuz中的提示信息中对不起,您还未登录,无法进行此操作。修改
- 请问用imagick如何把图片的四个角切成圆边
- ie9的兼容模式不兼容jquery的$.get ?
- 如何获取真正的连接地址
- PHP 开发 C2C 商场的问题
- mysql innodb的工作
- PHP夜未眠(我们都是PHP精英) QQ群:32345095 入群条件,一月以下的PHP学习者忽扰(特别渴望学习PHP者除外)!
- 我们公司是做餐饮系统软件的怎么样才能对接到美团类上面
- 点击[支持]页面不刷新,但支持量增1的效果。
- 请教一个问题,如何将ecshop的dwt模板文件改成html文件
$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;
}
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]);
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]);
<?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]));
}
?>