Сколько разных цифр встречается в большом шестнадцатеричном числе

Рейтинг: 1Ответов: 3Опубликовано: 04.05.2023

Значение выражения 4^34 + 5 * 4^22 + 4^13 + 2 * 4^9 + 82 записали в 16-й системе счисления. Сколько разных цифр встречается в этой записи?

Мой код должен выводить цифры: 0, 1, 2, 4, 5, 8; но выводит все те же, кроме двойки.

    double vr = Math.Pow(4, 34) +5 * Math.Pow(4, 22) + Math.Pow(4, 13) + 2
    * Math.Pow(4, 9) + 82;
    List<int> ints = new List<int>();
    while (vr > 0)
    {
        ints.Add(Convert.ToInt32(vr % 16));
        vr /= 16;
    }
    IEnumerable<int> chars2 = ints.Distinct();
    foreach (int i in chars2)
    {
        Console.WriteLine(i);
    }

Ответы

▲ 2Принят

Переписываем так, где h=16

4^34   +    5 * 4^22 + 4^13 +    2 * 4^9 + 82
1 * h^17 +  5 * h^11 + 4 * h^6 + 8 * h^4 + 5 * h + 2

И видим все ненулевые цифры

▲ 0

C большим числом что-то не вышло,

test.cs(9,36): error CS1021: Integral constant is too large

using System;
using System.Linq;
using System.Collections.Generic;

class App
{
    public static void Main(string[] args)
    {
        var vr = 0x1000500004080052;
        List<int> ints = new List<int>();
        while (vr != 0)
        {
            ints.Add(Convert.ToInt32(vr & 0xF));
            vr >>= 4;
        }
        IEnumerable<int> chars2 = ints.Distinct();
        foreach (int i in chars2)
        {
            Console.WriteLine(i);
        }
    }
} 

2 5 0 8 4 1

▲ 0

С использованием большого целого числа:

    BigInteger vr = BigInteger.Pow(4, 34) + 5 * BigInteger.Pow(4, 22) +
    BigInteger.Pow(4, 13) + 2 * BigInteger.Pow(4, 9) + 82;
    List<BigInteger> hexNumbers = new List<BigInteger>();
    while (vr > 0)
    {
        hexNumbers.Add(vr % 16);
        vr /= 16;
    }
    IEnumerable<BigInteger> uniqueNumbers = hexNumbers.Distinct();
    foreach (int number in uniqueNumbers)
    {
        Console.Write(number);
    }

250841