none
Как разбить число на равные части? RRS feed

  • Вопрос

  • Здравствуйте. Задавал вопрос на других ресурсах, но не смог найти решения. 
    Задачу мне поставили следующую: 
    Необходимо написать конвертер чисел в двоичной системе в 16-ричную и 8-ричную. 
    Пользователь вводит числа, которые должны храниться в массиве, а потом нажав на номер индекса получить введеное число в других (указанных выше) СС. использование стандартных функций C# для решение этой задачи запрещено. Т.е. все арифметические действия с числами должна производить моя программа.

    Проблема в том, что я не знаю, как обрабатывать числа. Мне надо каким-то образом брать полученное число, справа на лево делить его на части по 3 символа, к старшему биту добавлять нули (если не хватает до общего числа символов 3), потом производить над каждой группой полученных чисел проводить арифметические операции. 

    Я предполагал копировать от числа последние 3 символа -> присваивать их переменной -> конвертировать -> удалять из первоначального числа 3 уже ненужные использованные числа -> копировать 3 последних и далее по кругу, но дело в том, что у меня не копируются последние 3, и я не могу придумать, как заполнить старший бит нолями, если в нем будет недостаточно чисел. 

    Если я использую substring для получения последних 3 чисел, то программа дает ошибку. 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    //using System.Text.RegularExpressions;
    
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Создаем массив
                string[] nums = new string[12];
                // Создаем временный массив для конвертации чисел
                string[] temp = new string[3];
                // Количество символов в группе для перевода в восьмеричную систему
                int oct = 3;
                
                // Получаем двоичные числа для конвертации
                Console.WriteLine("Введите 12 чисел");
                for (int i = 0; i < nums.Length; i++)
                {
                    Console.Write("{0} - е число: ", i + 0);
                    nums[i] = Console.ReadLine();
                }
                
                // Получаем индекс конвертируемого числа
                Console.WriteLine("Выберите число по порядковому номеру, для конвертации.");
                
                // Передаем переменной значение, хранящееся в массиве
                int s;
                s = Int32.Parse(Console.ReadLine());
    
                // Тут должна быть работа с переменной. 
                int binary;
                // Переменная binary получает первые 3 числа с ней проводятся арифметические операции, и т.д.
                // В итоге должно получится число, которое будет результатом перевода из двоичной системы в восьмеричную.
    
                string b = s.Length;
    
                Console.WriteLine(nums[s]);
                Console.ReadLine();
            }
        }
    }

    Я не прошу готового кода или решения, прошу вас подсказать о каких методах мне необходимо знать, что почитать и выучить, чтобы приблизиться к решению задачи. 

    Спасибо.

    29 октября 2018 г. 5:23

Ответы

Все ответы

  • использование стандартных функций C# для решение этой задачи запрещено. Т.е. все арифметические действия с числами должна производить моя программа.


    Разрешено ли использовать логические операторы And, Or, Xor, сдвиги и прочее? Работа через string - это совсем ужасный путь.
    29 октября 2018 г. 6:09
  • использование стандартных функций C# для решение этой задачи запрещено. Т.е. все арифметические действия с числами должна производить моя программа.


    Разрешено ли использовать логические операторы And, Or, Xor, сдвиги и прочее? Работа через string - это совсем ужасный путь.

    Да, всё остальное использовать можно. 

    string использовал, так как прочитал, что для работы с восьмиричной и другими СС, отличных от десятичной лечше брать строки. Поэтому взял строковой массив, чтобы хранить в нем введенные числа. 

    Все таки лучше брать int?

    29 октября 2018 г. 6:22
  • Лучше тогда использовать логические операторы. С помощью And выделяете нужное кол-во бит и переводите их в нужную СС. Потом сдвигаете и повторяете пока не останется ноль в сдвигаемом числе или лучше пока не наполните весь массив конкретной СС.
    29 октября 2018 г. 6:50
  • Спасибо. Попробую
    29 октября 2018 г. 6:58