Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace Precision
- {
- using System;
- public class Program
- {
- public static void Main()
- {
- int maxDenominator = int.Parse(Console.ReadLine());
- var fraction = Console.ReadLine().Split('.')[1];
- int bestNominator = 0;
- int bestDenominator = 1;
- int precision = 0;
- for (int denominator = 1; denominator < maxDenominator; denominator++)
- {
- int left = 0;
- int right = denominator;
- while (left < right)
- {
- int middle = (left + right) / 2;
- if (Compare(fraction, middle, denominator))
- {
- right = middle;
- }
- else
- {
- left = middle + 1;
- }
- }
- int current = Precision(fraction, left - 1, denominator);
- if (current > precision)
- {
- bestDenominator = denominator;
- bestNominator = left - 1;
- precision = current;
- }
- current = Precision(fraction, left, denominator);
- if (current > precision)
- {
- bestDenominator = denominator;
- bestNominator = left;
- precision = current;
- }
- }
- Console.WriteLine("{0}/{1}", bestNominator, bestDenominator);
- Console.WriteLine(precision + 1);
- }
- public static bool Compare(string fraction, int a, int b)
- {
- a *= 10;
- int i;
- for (i = 0; i < fraction.Length; i++)
- {
- int digit = a / b;
- if (digit < fraction[i] - '0')
- {
- // our number is smaller - go right
- return false;
- }
- else if (digit > fraction[i] - '0')
- {
- // our number is bigger - go left
- return true;
- }
- a = (a % b) * 10;
- }
- return true;
- }
- public static int Precision(string fraction, int a, int b)
- {
- a *= 10;
- int i;
- for (i = 0; i < fraction.Length; i++)
- {
- int digit = a / b;
- if (digit != fraction[i] - '0')
- {
- break;
- }
- a = (a % b) * 10;
- }
- return i;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement