我想这将是简单的,但谷歌搜索似乎并没有帮助。

我基本上试图写,这将返回一个比作为字符串的函数(例如4:3)当用两个整数(例如800和600)供应

string GetRatio(Int A, Int B) {
    // Code I'm looking for
    return Ratio;
}
有帮助吗?

解决方案

可以简化通过将分子和分母可以通过 GCD :

var gcd = GCD(A, B);
return string.Format("{0}:{1}", A / gcd, B / gcd)

和用于计算GCD,使用一个非常基本的功能欧几里德算法

static int GCD(int a, int b) {
    return b == 0 ? Math.Abs(a) : GCD(b, a % b);
}

其他提示

您基本上试图让最大公约数 - GCD的两个数字,然后将它们除以该从而让您的字符串

即:800:600;最大公约数= 200从而4:3

这将能够处理所有整数。对不起,不发送代码,但我认为,从这个它应该足够简单。

public int GCD(int a, int b)

{
    while (a != 0 && b != 0)
    {
         if (a > b)
            a %= b;
         else
            b %= a;
    }
     if (a == 0)
         return b;
     else
         return a;
}

// Using Konrad's code: 

var gcd = GCD(A, B);
return string.Format("{0}:{1}", A / gcd, B / gcd)

打过,在过去这样的事情,我只补充一点,处理符号的值会变得非常恶劣。让我建议,要处理符号值的最简单方法是康拉德的方法应用到你原来的号码的的的绝对值的,然后在前面加上一个“ - ”所得到的字符串,如果原来的数值有不同的符号。

采用这种方法,-100和-35最大公约数为5,20的比率:7。如果原始投入已经或者对(-100和35)或(100和-35),你仍然会得到5个GCD和20的初始结果:7,但最终的答案是 - 20:7(即标准化形式不论哪个输入的是阴性,就像两个-6/2和6 / -2 = -3)

其他评论家给出整数良好的解决方案;如果你真的要处理浮点值,不过,你需要别的东西。一般情况下,两个实数不会有一个干净的比率可以娇滴滴印刷;你想要的是最接近的有理逼近。也许是最好的方式去寻找的的就是计算商的连分数扩展;马克Dominus给出了一个很好的介绍,这些在他的博客

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top