У меня двойной ввод "а". Моя цель - найти целое число «b», такое, что «a * b» даст целое число плюс некоторое допустимое количество ошибок. Например, «100.227273 * 22 = 2205 (+ 0,000006 ошибка)», где я хочу найти ответ «22».
Я уже изучил этот пост , но я только частично понимаю верхний ответ. Я мог бы действительно использовать некоторую помощь при создании алгоритма, который выполняет эту задачу. У меня есть код ниже, который работает для некоторых случаев, но не для всех.
private int FindSmallestMultiplier(double input)
{
int numerator = 1;
int temp;
double output = input;
double invert = input;
int denominator = 1;
List<int> whole = new List<int>();
double dec = input;
int i = -1;
while (Math.Abs(Math.Round(numerator * input)-numerator*input) > 0.001)
{
i = i + 1;
//seperate out the whole and decimal portions of the input
whole.Add(Convert.ToInt32(Math.Floor(invert)));
dec = output - whole[i];
//get the decimal portion of the input, and invert
invert = 1 / dec;
//create nested fraction to determine how far off from a whole integer we are
denominator = 1;
numerator = 1;
for(int j = whole.Count-1; j >= 0; j--)
{
temp = whole[j] * denominator + numerator;
numerator = denominator;
denominator = temp;
}
}
return numerator;
}
Приведенный выше код работает для многих случаев ввода, таких как 0,3333, 0,5. Пример того, где это не работает - 0,75 или 0,101, просто чтобы назвать пару из бесконечности. Пожалуйста, помогите мне выяснить, что не так с моим кодом, или приведите пример кода, который даст желаемый результат. Спасибо!