无法编写最常见的除数方法

时间:2014-11-04 06:20:21

标签: c#

我正在创建一个计算器程序,需要创建GreatestCommononDivisorReduceFraction方法;但我的GreatestCommonDivisor方法没有得到正确的价值,我不确定原因。

任何人都可以向正确的方向提供任何指导或帮助吗?

public static void ProcessReduceFraction()
{

    Int32 numerator, denominator, reducedNumerator, reducedDenominator; 

    numerator = GetPostiveNonZeroInteger("Please Enter Non-Zero Postive Numerator");
    denominator = GetPostiveNonZeroInteger("Please Enter Non-Zero Postive Denominator");
    reducedNumerator = numerator / GreatestCommonDivisor(denominator, numerator);
    reducedDenominator = denominator / GreatestCommonDivisor(numerator, denominator);

    Console.WriteLine("{0}/{1} can be reduced to: {2}/{3} ", numerator, denominator, reducedNumerator, reducedDenominator);
    Console.ReadLine();
}

public static Int32 GreatestCommonDivisor(Int32 r, Int32 n)
{

    Int32 remainder ,dividend, divisor, pervremainder;

    dividend = Math.Max(Math.Abs(n),Math.Abs(r));
    divisor = Math.Min(Math.Abs(n), Math.Abs(r));
    remainder = dividend % divisor;
    pervremainder = divisor;

    // Pull out remainders.
    while (remainder == 0)
    {

        if (remainder!= 0)
        {
            dividend = divisor;
            divisor = remainder;
            pervremainder = remainder;
            remainder = dividend % divisor;
        }
    }

    return pervremainder;
}

public static void ProcessGreatestCommonDivisor()
{

    Int32  firstnumber, secondnumber, greatestcommondivisor;

    firstnumber = GetPostiveNonZeroInteger("Plesae Enter Non-Zero Postive First Number");
    //firstnumber = Int32.Parse(Console.ReadLine());
    secondnumber = GetPostiveNonZeroInteger("Please Enter Non-Zero Postive Secound Number");
    //secoundnumber = Int32.Parse(Console.ReadLine());
    greatestcommondivisor = GreatestCommonDivisor(secondnumber, firstnumber);
    //greatestcommondivisor = Int32.Parse(Console.ReadLine());
    Console.WriteLine("The Greatest Common Divisor of {0} and {1} is: {2} ", 
    firstnumber,secondnumber, greatestcommondivisor);
    Console.ReadLine();
}

public static Int32 GetPostiveNonZeroInteger(String prompt)
{

    Int32 n;
    Console.WriteLine(prompt);
    n = Int32.Parse(Console.ReadLine());

    while (n <= 0)
    {
        Console.WriteLine("Error: enter non-zero postive value");
        Console.WriteLine(prompt);
        n = Int32.Parse(Console.ReadLine());
    }

    return n;
}

}

1 个答案:

答案 0 :(得分:0)

因为你提到了计算最大公约数。我认为一个简单的方法就是

     public static int gcd(int dividend, int divisor)
    {
        while (divisor != 0)
        {
            int pervremainder = divisor;
            divisor = dividend % divisor;
            dividend = pervremainder;
        }
        return dividend;
    }

或者您也可以查看此Calculate GCD