Переполнение путем преобразования hex в decimal вручную в C#

моя задача-написать программу, используя циклы, которые преобразуют шестнадцатеричное целое число в десятичное.Не используйте встроенные функции .NET.

Я написал программу, и она работает для всех тестов, кроме «4ED528CBB4», и она переполняется после «D». Я использую long для результата, и я не могу найти проблему.

        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);
        }

    }

1 ответ