вентилятор
Хорошего настроения!

Перевод десятичных дробей в обычные. Язык программирования C#.



Сегодня разберём задачу, которая принесла мне 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:


Перевод десятичных дробей в обычные. Язык C#


На этом всё. Любите информатику и информатика будет любить вас!



03-09-2018 в 20:18:31





Поддержать сайт:


Похожая статья:

Задача по информатике. Симметричная дата.

Сегодня разберём интересную задачу по информатике....

Категория: Задачи  Подкатегория: -
Дата: 26-01-2018 в 19:16:17 1



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:




Нажимая кнопку Отправить, Вы соглашаетесь с политикой конфиденциальности сайта.