我正在寻找一个库或现有代码来简化分数。
有没有人手边有任何东西或任何链接?
P.S。我已经understand the process但是真的不想重写轮子
好的我已经查看了fraction library on the CodeProject 但是我所遇到的问题比简化一个小部分有点琐碎。
我必须减少百分比,这可能是20%/ 50%/ 30%(总是等于100%)
答案 0 :(得分:11)
我认为你只需要将所有数字除以GCD。
void Simplify(int[] numbers)
{
int gcd = GCD(numbers);
for (int i = 0; i < numbers.Length; i++)
numbers[i] /= gcd;
}
int GCD(int a, int b)
{
while (b > 0)
{
int rem = a % b;
a = b;
b = rem;
}
return a;
}
int GCD(int[] args)
{
// using LINQ:
return args.Aggregate((gcd, arg) => GCD(gcd, arg));
}
我没有尝试过代码,但看起来很简单(假设你的数字都是正整数而你没有传递一个空数组)。
答案 1 :(得分:3)
您可以使用免费F# Power Pack库中的Microsoft.FSharp.Math.BigRational。虽然它取决于F#(免费提供并包含在VS2010中),但它可以在C#中使用。
BigRational reduced = BigRational.FromInt(4)/BigRational.FromInt(6);
Console.WriteLine(reduced);
2/3
Console.WriteLine(reduced.Numerator);
2
Console.WriteLine(reduced.Denominator);
3
答案 2 :(得分:2)
自定义解决方案:
void simplify(int[] numbers)
{
for (int divideBy = 50; divideBy > 0; divideBy--)
{
bool divisible = true;
foreach (int cur in numbers)
{
//check for divisibility
if ((int)(cur/divideBy)*divideBy!=cur){
divisible = false;
break;
}
}
if (divisible)
{
for (int i = 0; i < numbers.GetLength(0);i++ )
{
numbers[i] /= divideBy;
}
}
}
}
使用示例:
int [] percentages = {20,30,50};
simplify(percentages);
foreach (int p in percentages)
{
Console.WriteLine(p);
}
Outupts:
2
3
5
顺便说一下,这是我的第一个c#程序。认为尝试一种新语言只是一个有趣的问题,现在我爱上了!它就像Java,但我希望的一切都与我想要的有点不同
&lt; 3 c#
编辑:顺便说一句,如果是你的Main类,请不要忘记将其设为静态无效。
答案 3 :(得分:1)
This library看起来可能就是您所需要的:
var f = new Fraction(numerator, denominator);
numerator = f.Numerator;
denominator = f.Denominator;
虽然,我还没有对它进行测试,所以看起来你可能需要玩它才能让它发挥作用。
答案 4 :(得分:1)
我见过的Fraction(aka Rational)的最佳例子是Timothy Budd's "Classic Data Structures in C++"。他的实施非常好。它包括一个简单的GCD算法实现。
应该很难适应C#。