Я знаю, что этот вопрос, вероятно, задавался на этом форуме много раз и в Интернете. Меня попросили создать реализацию большого целого числа в C++, но есть ограничение, что один из моих конструкторов должен принимать int как аргумент ... так что я предполагаю, что будет более одного конструктора, отличного от стандартного. поэтому мой вопрос: какой будет самый простой способ сделать это?большие целые числа в C++
ответ
Зачем изобретать велосипед? Используйте GNU MP library.
[EDIT] Пахнет домашней работой. Поэтому, когда у вас есть BigBit
класс, то сделать это:
- Очистить все биты
- Написать цикл, который идет по всем битам на
int
аргумента конструктора - Для каждого бита в
int
аргумента,!= 0
, установите бит в векторBigBit
.
а C++ - это оо, одно из требований - реализовать его сам, и я должен его организовать таким образом: BigInteger в основном представляет собой вектор указателей BigBit. BigBit должен перегружать стандартные логические операторы на битах, например, &, |, ~ и ^. Поэтому я реализую BigBit как bool ... Теперь вопросы в том, как хранить большие числа в классе BigInteger. Как это работает, если у меня есть такое ограничение – Alex
, а также если аргумент является int, мы говорим о больших числах здесь .. так что int не будет содержать его ... что, если аргумент является строкой, как вы бы преобразовали строку в биты .... представляя это большое количество – Alex
Посмотрите на исходный код 'atoi()' как преобразовать строку в ее двоичное представление. Это довольно просто. См. Koders.com для примера: http://www.koders.com/c/fid85C526B4C012C3A19A83B32509327C77C9AC5598.aspx?s=atoi.c#L1 –
C++ BigInt class
C++ Big Integer Library
написать большую Int, например:
typedef struct {
int high, low;
} BiggerInt;
BiggerInt add(const BiggerInt *lhs, const BiggerInt *rhs) {
BiggerInt ret;
/* Ideally, you'd want a better way to check for overflow conditions */
if (rhs->high < INT_MAX - lhs->high) {
/* With a variable-length (a real) BigInt, you'd allocate some more room here */
}
ret.high = lhs->high + rhs->high;
if (rhs->low < INT_MAX - lhs->low) {
/* No overflow */
ret.low = lhs->low + rhs->low;
}
else {
/* Overflow */
ret.high += 1;
ret.low = lhs->low - (INT_MAX - rhs->low); /* Right? */
}
return ret;
}
вопрос, то, кажется, "как я могу превратить целое число в списке битов"? Иными словами, каково базовое представление целого числа?
Поскольку это должно быть домашнее задание, позвольте мне рассказать о проблеме, подумав в базе 10; соответствующие изменения должны быть очевидны с некоторой мыслью.
Учитывая номер базы 10, довольно легко понять, что такое самая правая цифра: это просто остаток при делении на 10. Например. если n = 1234, то это самая правая цифра равна n% 10 = 4. Чтобы получить следующую самую правую цифру, мы делим на 10 (получаем 123) и повторяем процесс. Итак:
1234/10=123; 1234%10 = 4
123/10=12 ; 123%10 = 3
12/10=1 ; 12%10 = 2
1/10=0 ; 1%10 = 1
Итак, теперь мы получили ответы [4,3,2,1]. Если мы отменим их, у нас будет базовый 10 цифр нашего номера: [1, 2, 3, 4].
это работает, если целое число невелико ...что, если целое число велико, такое как 2^10 ... определенно мне нужно сохранить это в переменной сначала, прежде чем преобразовать его в биты ... теперь проблема в том, какая переменная сможет ее сохранить ... string будет делать это, но тогда как мне преобразовать строку в двоичный файл ... – Alex
2^10 на самом деле не такой большой. И алгоритм, на который я намекаю, занимает только одно деление и по модулю на цифру ответа. Он будет работать нормально, если номер, который вы начинаете, подходит для машинного слова (например, unsigned int). И если это не так, что мы пытаемся снова преобразовать? – Managu
- 1. Большие целые числа в C#
- 2. Как обрабатывать большие целые числа в C
- 3. Произвольно большие целые числа в C#
- 4. Сравнить большие целые числа в массиве
- 5. большие целые числа в cypher, neo4j
- 6. Как сделать большие целые числа в Fortran?
- 7. Как объединить большие целые числа в Java?
- 8. Как обрабатывать сколь угодно большие целые числа
- 9. % d для printf() выводит большие целые числа.
- 10. Как использовать большие целые числа в программе на C?
- 11. Mathematica импортирует большие целые числа из .csv?
- 12. Большие целые числа и пользовательская проверка
- 13. большие целые числа с фиксированной длиной
- 14. 2 pow X, используя большие целые числа
- 15. Как кабинет Токио обрабатывает большие целые числа?
- 16. PHP + mysql: как хранить большие целые числа
- 17. PEP8 - 80 Персонажи - большие целые числа
- 18. Различные целые числа? C#
- 19. Случайные целые числа C++
- 20. Умножить большие числа в объекте-c
- 21. Очень Большие Целые в PHP
- 22. Соединительные целые числа в C#
- 23. Невероятно большие числа в C++
- 24. Как сравнить большие целые числа, хранящиеся в массиве int?
- 25. Невероятно большие и невероятно маленькие числа (а не только целые числа) в C#
- 26. Как javascript обрабатывает большие целые числа (более 52 бит)?
- 27. Как обрабатывать большие целые числа (64 бит) в tcl?
- 28. Большие целые числа в javascript (более 2^53-1)
- 29. Большие целые числа в памятном рекурсивном фибоначчи (Y)
- 30. Как временно наложить целые числа на большие размеры в Haskell?
звучит как домашнее задание – Alon
а также C++ - это оо, одно из требований к домашнему заданию - реализовать его сам, и я должен организовать его таким образом: BigInteger в основном представляет собой вектор указателей BigBit. BigBit должен перегружать стандартные логические операторы на битах, например, &, |, ~ и ^. Поэтому я реализую BigBit как bool ... Теперь вопросы в том, как хранить большие числа в классе BigInteger. Как это работает, если у меня есть такое ограничение? И да, это домашнее задание, я просто пытаюсь найти идеи или идеи о том, как сделать это самым простым способом ... – Alex