Даша: Спасибо:3
31-05-2023
Читать статью
Санечка: я ничего не учила) но буду надеятся что ..
30-05-2023
Мейнер Сяо: Удачи всем сегодня на экзамене ;)..
Сегодня разберём задачу, которая принесла мне 1500 рублей, от одного заказчика. Данная задача является подзадачей более серьёзной математической задачи.
Задача: Необходимо написать программу, которая переводит десятичные дроби в обычные. Пример: 0.5 -> 1/2. Число не превосходит 105, максимальное количество знаков после запятой не может быть больше 10.
Решение: Язык программирования будем использовать C#, всё больше и больше набирающий обороты в информатике, математике и бизнесе.
В данной задаче мы не будем делать "защиту от дурака", т.к. считаем, что данные удовлетворяют условию.
Суть задачи сводится к тому, что мы должны перевести число в строковый тип данных, затем найти "," и отделить целую и дробную часть. (Кстати, при приведении числа 0.2 типа double в строку, вместо точки появляется запятая "0,2"). Дальше действуем, как если бы мы переводили вручную. Пусть будет число 0.5, тогда мы отделяем дробную часть 5 и записываем как 5/10. Остаётся только сократить. Если целая часть не равна нулю, то переводим в неправильную дробь по обычным правилам математики.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { double d = 0.2; string r = Drob(d); Console.WriteLine(r); Console.ReadKey(); } static public string Drob(double numeric) { string result = ""; bool otr = false; if(numeric < 0) { otr = true; numeric = numeric * (-1); } int ind = numeric.ToString().IndexOf(','); if (ind == -1) return numeric.ToString(); ulong cel = ulong.Parse(numeric.ToString().Substring(0, ind)); ulong chisl = ulong.Parse(numeric.ToString().Remove(0, ind + 1)); ulong znam = 1; for (int i = 0; i < chisl.ToString().Length; i++) znam *= 10; for (ulong i = 2; i < znam; i++) { if (chisl % i == 0 && znam % i == 0) { chisl /= i; znam /= i; i = 1; } } result = (cel*znam + chisl).ToString() + "/" + znam.ToString(); if(otr) { result = "-" + result; } return result; } } }
Вот результат работы программы для числа 0.2:
На этом всё. Любите информатику и информатика будет любить вас!