2014-11-04 67 views
0

我正在創建一個計算器程序,需要創建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; 
} 

}

+3

有有什麼錯誤?計算錯了嗎?這是一項家庭作業嗎?您可能想首先看到:stackoverflow.com/help/how-to-ask – bit 2014-11-04 06:26:42

回答

0

既然你提到的有關計算最大公Divisor.I認爲一個簡單的方法是

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

或者你也可以看看這個Calculate GCD