Перевод целых чисел в десятичную систему счисления - C#

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

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

Перевод целых чисел q -> 10.Дано целое число в системе счисления с основанием q, 2 ≤ q ≤ 16. Найти его значение в 10-чной системе счисления. Ввод В первой строке – целое число q (основание системы счисления) Во второй строке – число, представленное в q-чной системе счисления. Вывод Значение введенного числа в 10-чной системе счисления. Например: Ввод 10 123456 Вывод 123456 Ввод 7 66666 Вывод 16806 Ввод 16 FFFFF Вывод 1048575 Вот мои наброски, не знаю как быть дальше? Подскажите пожалуйста.
using System;
class Program
    {
        static int chisl(char a)
        {
            switch (a)
            {
                case '0': return 0;
                case '1': return  1;
                case '2': return  2;
                case '3': return  3;
                case '4': return  4;
                case '5': return  5;
                case '6': return  6;
                case '7': return  7;
                case '8': return  8;
                case '9': return  9;
                case 'A': return  10;
                case 'B': return  11;
                case 'C': return  12;
                case 'D': return  13;
                case 'E': return  14;
                case 'F': return  15;
                default: return -1;
            }
        }

Решение задачи: «Перевод целых чисел в десятичную систему счисления»

textual
Листинг программы
[CSHARP]namespace Schislenie
{
    public partial class Form1 : Form
    {
        string bukv = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        public Form1()
        {
            InitializeComponent();
            numericUpDown1.Minimum = 2;
            numericUpDown1.Maximum = 25;
            numericUpDown1.Value = 10;
            numericUpDown2.Minimum = 2;
            numericUpDown2.Maximum = 25;
            numericUpDown2.Value = 10;
            button1.Enabled = false;
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text.Length != 0)
                button1.Enabled = true;
            else
                button1.Enabled = false;
        }
        /// <summary>
        /// Переводит из деятичной системы счисления в систему счисления с основанием N
        /// </summary>
        /// <param name="number">Число, которое переводим </param>
        /// <param name="sys">Система счисления, в которую переводим</param>
        /// <returns>Возвращает переведенное число в строковом формате</returns>
        private string ToN(string number, string sys)
        {
            string newNum = "";
            int num = Convert.ToInt32(number);
            int chast = Convert.ToInt32(number);
            ArrayList numTemp = new ArrayList();
            while(chast>0)
            {
                chast = chast / Convert.ToInt32(sys);
                numTemp.Add(num - chast * Convert.ToInt32(sys));
                num = chast;
            }
            int j;
            for (j=numTemp.Count-1; j >= 0; j--)
                newNum += newCh(numTemp[j].ToString(),"to");
            return newNum;
        }
        /// <summary>
        /// Функция, заменяет буквы на числа и наоборот
        /// </summary>
        /// <param name="sym">Число, над которым нужно работать</param>
        /// <param name="otk">В какую сторону осуществляется действие относительно десятичной системы счисления</param>
        /// <returns>Возвращает букву, если числу соответствует буква и наоборот, иначе число</returns>
        string newCh(string sym,string otk)
        {
            string s = "";
            if (otk == "to")
            {
                if (Convert.ToInt32(sym) > 10)
                    s += bukv.Substring(Convert.ToInt32(sym) - 10, 1);
                else
                    s += sym;
            }
            else if (otk == "from")
            {
                if (bukv.IndexOf(sym)==-1)
                    s += sym;
                else
                    s += (bukv.IndexOf(sym) + 10).ToString();
            }
            return s;
        }
 
 
        /// <summary>
        /// Переводит системы счисления с основанием N в деятичную систему счисления 
        /// </summary>
        /// <param name="number">Число, которое переводим </param>
        /// <param name="sys">Система счисления, из которой переводим</param>
        /// <returns>Возвращает переведенное число в строковом формате</returns>
        private string FromN(string number, string sys)
        {
            int newNum = 0;
            string temp = "";
            int t;
            int i;
            for (i = 0; i < number.Length; i++)
            {
                temp = "";
                temp += newCh(number.Substring(i, 1), "from");
                t=(int)Math.Pow(Convert.ToDouble(sys),Convert.ToDouble(number.Length-(i+1)));
                newNum += Convert.ToInt32(temp) * t;
            }
            return newNum.ToString();
        }
        private string FromTo(string number, string sysN, string sysK)
        {
            string temp="";
            temp=FromN(number, sysN);
            temp = ToN(temp, sysK);
            return temp;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if(numericUpDown1.Value==10 && numericUpDown2.Value!=10)
                textBox2.Text = ToN(textBox1.Text, numericUpDown2.Value.ToString());
            else if (numericUpDown2.Value == 10 && numericUpDown1.Value != 10)
                textBox2.Text=FromN(textBox1.Text, numericUpDown1.Value.ToString());
            else if (numericUpDown2.Value != 10 && numericUpDown1.Value != 10)
                textBox2.Text = FromTo(textBox1.Text, numericUpDown1.Value.ToString(), numericUpDown2.Value.ToString());
            button1.Enabled = false;
        }
    }
}

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


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

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

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