Как реализовать перевод и 8 и 16-ричной сс в 2 и обратно, не используя существующих функций? - C#
Формулировка задачи:
подскажите: как реализовать перевод и 8 и 16-ричной сс в 2 и обратно, не используя существующих функций? на консоли
Решение задачи: «Как реализовать перевод и 8 и 16-ричной сс в 2 и обратно, не используя существующих функций?»
textual
Листинг программы
using System;
using System.Text;
namespace ConsoleApplication {
class Program {
static void Main() {
while (true) {
Console.WriteLine("Введите число, систему счисления, конечную систему(Например: 13 8 2):");
string command = Console.ReadLine();
if (command == "exit")
return;
string[] strs = command.Split(' ');
if (strs.Length != 3)
return;
var system = Convert.ToInt32(strs[1]);
var systemResult = Convert.ToInt32(strs[2]);
var number = strs[0];
Console.WriteLine("Результат: {0}", SystemConvert(number.ToLowerInvariant(), system, systemResult));
}
}
static string SystemConvert(string number, int from, int to) {
int normalNumber = To10System(number, from);
int rest = normalNumber;
var resStringBuilder = new StringBuilder();
while (rest >= to) {
int num = rest / to;
int numRest = rest % to;
resStringBuilder.Append(numRest);
rest = num;
}
resStringBuilder.Append(rest);
return resStringBuilder.ToString().ReverseString();
}
static int To10System(string number, int from) {
int result = 0;
for (int i = 0; i < number.Length; ++i) {
result += CharToInt(number[i]) * (int)Math.Pow(from, number.Length - i - 1);
}
return result;
}
static int CharToInt(char c) {
if (c.IsNumeric())
return c - '0';
return c - 'a' + 10;
}
}
public static class Extensions {
public static string ReverseString(this string str) {
char[] charArray = str.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
public static bool IsNumeric(this char chr) {
return chr >= '0' && chr <= '9';
}
}
}