Witam,
Albo czegoś tutaj nie rozumiem, albo czegoś nie zauważam, ale mój kod zdaje testy z zadania, komentarza oraz ze starego forum, ale nie zalicza mi odpowiedzi.
static void Main(string[] args)
{
var tests = int.Parse(Console.ReadLine());
for (int i = 0; i < tests; i++)
{
var number = float.Parse(Console.ReadLine());
printFloat(number);
}
Console.ReadLine();
}
private static void printFloat(float number)
{
bool[] boolArray = new bool[32];
if (number >= 0)
boolArray[0] = false;
else
boolArray[0] = true;
var counter = 0;
var pow = Math.Pow(2, counter);
if (Math.Abs(number) >= 1)
{
while (Math.Abs(number) > Math.Pow(2, counter))
counter++;
}
else
{
while (Math.Abs(number) < Math.Pow(2, counter))
counter--;
}
if (counter > 0)
counter--;
var exp = 127 + counter;
var bin = Convert.ToString(exp, 2);
if (bin.Length == 7)
bin = string.Format("0{0}", bin);
for (int i = 1; i < 9; i++)
{
if (bin[i - 1] == '1')
boolArray[i] = true;
else
boolArray[i] = false;
}
var temp = Math.Abs(number) / Math.Pow(2, counter);
temp--;
counter = -1;
for (int i = 9; i < 32; i++)
{
if (temp - Math.Pow(2, counter) >= 0)
{
temp -= Math.Pow(2, counter);
boolArray[i] = true;
if (temp == 0)
break;
}
counter--;
}
string binRes = "";
for (int i = 0; i < 32; i++)
{
if (boolArray[i] == true)
binRes += "1";
else
binRes += "0";
}
if (number == 0)
binRes = "00000000000000000000000000000000";
string[] dBR = new string[8];
var divCounter = 0;
for (int i = 0; i < 32; i+=4)
{
dBR[divCounter] = string.Format("{0}{1}{2}{3}", binRes[i], binRes[i + 1], binRes[i + 2], binRes[i + 3]);
divCounter++;
}
for (int i = 0; i < 8; i++)
{
switch (dBR[i])
{
case "0000":
dBR[i] = "0";
break;
case "0001":
dBR[i] = "1";
break;
case "0010":
dBR[i] = "2";
break;
case "0011":
dBR[i] = "3";
break;
case "0100":
dBR[i] = "4";
break;
case "0101":
dBR[i] = "5";
break;
case "0110":
dBR[i] = "6";
break;
case "0111":
dBR[i] = "7";
break;
case "1000":
dBR[i] = "8";
break;
case "1001":
dBR[i] = "9";
break;
case "1010":
dBR[i] = "a";
break;
case "1011":
dBR[i] = "b";
break;
case "1100":
dBR[i] = "c";
break;
case "1101":
dBR[i] = "d";
break;
case "1110":
dBR[i] = "e";
break;
case "1111":
dBR[i] = "f";
break;
}
}
string result = "";
for (int i = 0; i < 8; i+=2)
{
if (dBR[i] == "0" && dBR[i + 1] == "0")
result += "0";
else if (dBR[i] == "0")
result += dBR[i + 1];
else
result += string.Format("{0}{1}", dBR[i], dBR[i + 1]);
if (i != 6)
result += " ";
}
Console.WriteLine(result);
}
Wiem, że nie jest to piękny kod, ale z tego co widzę to działa, a mimo nie przechodzi zgłoszenia :S
Dziękuję z góry za pomoc.