public void ShowCCInto10cc(NumberCC a) { string[] content = new string[number.Length]; string[] rank = new string[number.Length]; for (int i = 0; i < number.Length; i++) { rank[i] = (number.Length - 1 - i).ToString(); } for (int i = 0; i < number.Length; i++) { content[i] = number[i].ToString(); } double n = 0; for (int i = 0; i < number.Length; i++) { if (i != 0) { Console.Write("+"); } Console.Write($"{content[i]}*({a.ccBefore}^{rank[i]})"); n += a.numericalForm[i] * Math.Pow(a.ccBefore, int.Parse(rank[i])); if (i == number.Length - 1) { Console.Write($"={n}"); } } Console.Write("\n"); }
static void ConvertToRomanN() { NumberCC a = new NumberCC { }; Table t = new Table { }; a.GetCCBefore(); a.GetNumberBefore(); a.ConvertToRomanNumerals(); Console.WriteLine("---Перевод в римскую систему счисления---"); if (a.ccBefore != 10) { Console.WriteLine("Сначала переводим в 10сс"); ConvertTo10CC(t, a); } Console.WriteLine("Римляне, как известно, использовали для записи числа латинские буквы.\n" + "Считается, что римская система счисления является классическим примером непозиционной системы счисления," + " то есть такой системы счисления, в которой величина, которую обозначает цифра, не зависит от положения в числе.\n" + "Напомним, что в римской системе счисления I обозначает 1, V обозначает 5, X — 10, L — 50, C — 100, D — 500, M — 1000,Ú - 5000" + ".\nНапример, число 3 в римской системе счисления будет обозначаться как III.\n" + "Однако на самом деле не все так просто, и она не является полностью непозиционной системой счисления," + " потому что в римской системе счисления есть дополнительное правило, которое влияет на величину," + " которую обозначает цифра, в зависимости от ее положения.\n" + "Правило это запрещает употреблении одной и той же цифры более 3 раз подряд, поэтому три это III, а четыре это уже IV," + " и I(1), стоящая перед большей цифрой V(5), обозначает вычитание, то есть фактически равна -1.\n" + "То есть мы разделяем число на разряды(тысячи,сотни,десятки,единицы) и заменяем их на римские эквиваленты:"); t.ShowRomanN(a); Console.WriteLine($"{a.numberBefore}{a.ccBefore}={a.romanNumber}"); }
public void ShowRomanN(NumberCC a) { var listNum = new List <string> { }; var listRoman = new List <string> { }; listNum.Add("Разряды"); listRoman.Add("Римские"); boxWidth = a.numberAfter.Length + 1; cellWidth = 7; int del = 1000; for (int i = 6; i >= 0; i -= 2) { int n = a.number10CC / del; listNum.Add(n.ToString()); int temp = a.number10CC; if (n != 0) { listRoman.Add(NumberCC.GetRomanNumber(n, i)); } temp = temp % del; del /= 10; } WriteBoxLine('┌', '─', '┬', '┐'); WriteBoxLine('│', ' ', '│', listNum); WriteBoxLine('├', '─', '┼', '┤'); WriteBoxLine('│', ' ', '│', listRoman); WriteBoxLine('└', '─', '┴', '┘'); }
public void Show10ccIntoRequiredCC(NumberCC a) { //вычисление кол-ва символов //численный вид var listDel = new List <string> { }; var listOstatok = new List <string> { }; listDel.Add("Число"); listOstatok.Add("Остаток"); int temp = a.number10CC; listDel.Add(temp.ToString()); listOstatok.Add((temp % a.ccAfter).ToString()); do { temp /= a.ccAfter; listDel.Add(temp.ToString()); listOstatok.Add((temp % a.ccAfter).ToString()); } while (temp >= a.ccAfter); boxWidth = a.numberAfter.Length + 1; cellWidth = 7; WriteBoxLine('┌', '─', '┬', '┐'); WriteBoxLine('│', ' ', '│', listDel); WriteBoxLine('├', '─', '┼', '┤'); WriteBoxLine('│', ' ', '│', listOstatok); WriteBoxLine('└', '─', '┴', '┘'); Console.Write($"\n{a.number10CC} в 10 в {a.ccAfter}={a.numberAfter} в {a.ccAfter}"); }
static void ConvertToNcc(Table t, NumberCC a) { Console.WriteLine("Переводим в нужную СС:"); Console.WriteLine("-разделить число на основание переводимой системы счисления"); Console.WriteLine("-найти остаток от деления целой части числа"); Console.WriteLine("-записать все остатки от деления в обратном порядке"); t.Show10ccIntoRequiredCC(a); }
static void ConvertTo10CC(Table t, NumberCC a) { Console.WriteLine("Перевеводим число в десятичную систему счисления"); Console.WriteLine($"Для перевода в десятичную систему счисления необходимо найти сумму произведений основания {a.ccBefore} на соответствующую степень разряда"); t.GetTableInfo(a.numberBefore); t.ShowRank(); Console.Write($"{a.numberBefore} в {a.ccBefore}сс в {a.ccAfter}cc="); t.ShowCCInto10cc(a); }
static void ConvertNumberToRequiredCC() { NumberCC a = new NumberCC { }; a.GetInfoCC(); var t = new Table { }; if (a.ccBefore != 10) { Console.WriteLine("---Перевод из одной ситемы счисления в другую---"); ConvertToNcc(t, a); ConvertTo10CC(t, a); } else { ConvertTo10CC(t, a); } }