Заметили ошибку ?
Выделите это место и нажмите Ctrl + Q

Перевод десятичных дробей в обычные. Язык программирования 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





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

Круги Эйлера в информатике

Пример задачи на круги Эйлера в информатике...

Категория: Алгоритмы  Подкатегория: Логика
Дата: 15-01-2018 в 16:47:34 1



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



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


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


Последние
видео:



Присылайте ваши задачи
Шейкер-сортировка (С#)


Подготовка к
ОГЭ


Подготовка к ОГЭ по информатике


Давайте
дружить!


Группа Вконтакте Code-Enjoy

Твиттер Александра Калужского

YouTube канал Code-Enjoy


Препод напал на тебя как вампир? Не бойся! Студланс защитит этот мир!