Превратить рациональную дробь в десятичную. Возможен период. "1/3" должна превратиться в "0.(3)" - C#

Узнай цену своей работы

Формулировка задачи:

Превратить рациональную дробь в десятичную. Возможен период. "1/3" должна превратиться в "0.(3)"

Решение задачи: «Превратить рациональную дробь в десятичную. Возможен период. "1/3" должна превратиться в "0.(3)"»

textual
Листинг программы
class Program
{
    static string GetFracString(int a, int b)
    {
        if (b == 0) return "(not a number)";
        var d = new StringBuilder();
 
        // Убираем знак
        var sa = a < 0 ? -1 : 1;
        var sb = b < 0 ? -1 : 1;
        if (sa * sb == -1) d.Append('-');
        a *= sa; b *= sb;
 
        // Выделяем целую часть
        d.Append(a / b);
        a = a % b;
 
        // Выделяем дробную часть
        if (a == 0) return d.ToString();
        var rems = new int[b]; // остатки (можно List<int>)
        d.Append('.');
        while (a > 0)
        {
            rems[a] = d.Length;
            a = a * 10;
            d.Append(a / b);
            a = a % b;
            if (rems[a] > 0)
            {
                d.Insert(rems[a], '(');
                d.Append(')');
                break;
            }
            rems[a] = d.Length;
        }
 
        return d.ToString();
    }
 
    static void Test(int a, int b)
    {
        Console.WriteLine("{0} : {1} = {2}", a, b, GetFracString(a, b));
    }
 
    static void Main()
    {
        Test(-15, 3);
        Test(-15, -3);
        Test(-15, 0);
        Test(0, 15);
        Test(1221, 990);
        Test(10102, 99999);
        Test(10102 + 12345 * 99999, 99999);
        Test(12222, 990);
        Console.ReadLine();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы