C# Исходник Система счисления

Savok

Потрачен
Автор темы
178
292
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Подобие калькулятора 5ой системы счисления​
Код:
using System;
 
namespace Kakylyator
{
    class Program
    {
        const int BASE = 5;
// Не трогайте код, он и так на последнем дыхании
// Не трогайте код, он и так на последнем дыхании
        static void Main(string[] args)
        {
            while (true)
            {
                try
                {
                    Console.Write("Введите первое число: ");
                    string num1_str = Console.ReadLine();
                    Console.Write("Введите второе число: ");
                    string num2_str = Console.ReadLine();
                    Console.Write("Введите операцию(действие): ");
                    string operand = Console.ReadLine();
                    double num1_dec = ConvertToDec(num1_str);
                    double num2_dec = ConvertToDec(num2_str);
                    double result_dec = PerformOperation(num1_dec, num2_dec, operand);
                    string result_str = ConvertToBase(result_dec);
 
                    Console.WriteLine($"Результат: {result_str}");
                }
                catch (ArgumentException e)
                {
                    Console.WriteLine(e.Message);
                }
                catch (OverflowException)
                {
                    Console.WriteLine("Макс.разряд");
                }
                Console.WriteLine();
            }
        }
 
        static double ConvertToDec(string num_str)
        {
            bool isNegative = false;
            if (num_str[0] == '-')
            {
                isNegative = true;
                num_str = num_str.Substring(1);
            }
 
            double num = 0;
            for (int i = num_str.Length - 1; i >= 0; i--)
            {
                if (!char.IsDigit(num_str[i]) || (int)char.GetNumericValue(num_str[i]) >= BASE)
                {
                    throw new ArgumentException($"Символ недопускается {i + 1}");
                }
                int digit = (int)char.GetNumericValue(num_str[i]);
                num += digit * Math.Pow(BASE, num_str.Length - i - 1);
            }
 
            if (isNegative)
            {
                num = -num;
            }
 
            return num;
        }
 
        static string ConvertToBase(double num_dec)
        {
            bool isNegative = false;
            if (num_dec < 0)
            {
                isNegative = true;
                num_dec = -num_dec;
            }
 
            if (num_dec == 0)
            {
                return "0";
            }
            string digits = "";
            while (num_dec > 0)
            {
                int digit = (int)(num_dec % BASE);
                digits += digit.ToString();
                num_dec = Math.Floor(num_dec / BASE);
            }
 
            if (isNegative)
            {
                digits += "-";
            }
 
            return new string(digits.Reverse().ToArray());
        }
 
        static double PerformOperation(double num1_dec, double num2_dec, string operand)
        {
            if (operand == "+")
            {
                return num1_dec + num2_dec;
            }
            else if (operand == "-")
            {
                return num1_dec - num2_dec;
            }
            else if (operand == "*")
            {
                return num1_dec * num2_dec;
            }
            else if (operand == "/")
            {
                if (num2_dec == 0)
                {
                    throw new ArgumentException("Ноль");
                    Console.Write("Возможно все сломается :)");
                }
                return num1_dec / num2_dec;
            }
            else
            {
                throw new ArgumentException("Сломались//Нельзя");
            }
        }
    }
}
 
Последнее редактирование:
  • Вау
Реакции: Digger Man