0
我的任務是使用將十六進制整數轉換爲十進制形式的循環編寫程序。請勿使用內置的.NET功能。通過在C#中將十六進制轉換爲十進制數而溢出
我編寫了程序,它適用於除「4ED528CBB4」之外的所有測試,並在「D」後溢出。我用很久的結果,我找不到問題。
string hexadecimal = Console.ReadLine();
long result = 0;
for (int i = 0; i < hexadecimal.Length; i++)
{
if (hexadecimal[hexadecimal.Length - i - 1] >= '0' && hexadecimal[hexadecimal.Length - i - 1] <= '9')
{
result += ((hexadecimal[hexadecimal.Length - i - 1] - '0') * (int)Math.Pow(16, i));
}
else if (hexadecimal[hexadecimal.Length - i - 1] == 'D')
{
result += (13 * (int)Math.Pow(16, i));
}
else if (hexadecimal[hexadecimal.Length - i - 1] == 'C')
{
result += (12 * (int)Math.Pow(16, i));
}
else if (hexadecimal[hexadecimal.Length - i - 1] == 'A')
{
result += (10 * (int)Math.Pow(16, i));
}
else if (hexadecimal[hexadecimal.Length - i - 1] == 'B')
{
result += (11 * (int)Math.Pow(16, i));
}
else if (hexadecimal[hexadecimal.Length - i - 1] == 'F')
{
result += (15 * (int)Math.Pow(16, i));
}
else if (hexadecimal[hexadecimal.Length - i - 1] == 'E')
{
result += (14 * (int)Math.Pow(16, i));
}
}
Console.WriteLine(result);
}
}
嘗試無符號整數 – jdweng
將所有的轉換從'(int)'改爲'(long)',它適用於我。你也可以在溢出時拋出異常的操作加上'checked()'(如果溢出足夠了,它會再次變爲正值,你甚至可能不會注意到溢出):'result + = checked((13 * (long)Math.Pow(16,i)));'。我只是簡單地看了一下,但它看起來像'13 *(int)Math.Pow()'是在轉換爲'int'的地方溢出了,但是乘以13被推到'int'的極限。 – Quantic
坦克的答案。我添加了'checked'並將所有內容都改爲'long',現在出現了溢出消息。如何解決這個問題? – Mina