16,32 и т. Д. Байтовая переменная для утопического приложения

Следующие строки являются частью моей действительно «бесполезной» программы на C ++ … которая вычисляет степени от 2 до 2 ^ 63 вместо 2 ^ 128 «, который запрашивается» из-за длины «unsigned long long» переменная, которая предлагается для чисел с точностью до 15 цифр … !!!

Просто … мне нужна переменная 16 байтов или более … которая не предоставляется:

-__int128 (Visual Studio 2010 переводит буквы в синий цвет, но красную строку и ошибку в отладке: «ключевое слово не поддерживается в этой архитектуре» 32-разрядная система)

-Boost :: Projects … после того, как я погуглил это из-за того, что я новичок, «я был потерян во вселенной», когда я наткнулся на сайты профессионалов (действительно ли boost :: bigint … Существовать ??? не риторический вопрос)

(-Много печатать долго ‘)

int main()
{
unsigned long long result;
int i;
const int max=128;

for(i=0, result=1ll; i <= max; ++i,result *=2 )
cout<<setw(3)<< i <<setw(32)<< result <<endl;

system("pause");
return 0;
}

0

Решение

Вы можете найти реализацию «bigint» в C ++, которая реализует operator<<() для вывода в ostream-ы, но если все, что вы хотите сделать, это вывести степени 2 в консоль или текстовую строку, и вам не нужно на самом деле делать «bigint» математику (кроме как для вычисления этих степеней-2), есть более простой подход, который даст вам полномочия от 2 до достаточно больших, чем вы хотите & наберитесь терпения, чтобы просмотреть:

Сохраняйте каждую десятичную цифру (числа от 0 до 9) как отдельную сущность, возможно, как массив символов или целых чисел или в виде std :: список цифр. Преимущество использования std :: list заключается в том, что вы можете легко добавлять новые цифры в начале, когда ваш номер становится больше, но вы можете сделать это почти так же легко, сохраняя цифры в обратном порядке в std :: vector (конечно, чтобы распечатать их, вы должны выполнить итерацию сзади и вперед, чтобы печатать цифры в правильном порядке).

Как только вы выясните, как вы хотите сохранить цифры, ваш алгоритм удвоения числа выглядит следующим образом: перебирайте цифры большого числа, удваивая каждую (конечно, мод 10) и передавая любое переполнение (т.е. его результат … до %10… было больше 9) от этой цифры к следующей. На следующей цифре сначала удвойте ее, а затем добавьте 1, если предыдущая цифра переполнилась. И если этот результат переполнен, перенесите это переполнение на следующую цифру & продолжить до конца всех цифр. В конце цифр, если удвоить последнюю цифру & добавление любого переполнения из предыдущей цифры вызвало переполнение последней цифры, затем добавьте новую цифру & установите его в 1. Затем распечатайте полученный список цифр.

С помощью этого алгоритма вы можете печатать степени 2, как вам нравится. Конечно, они не являются «числами» в том смысле, что вы не можете использовать их непосредственно в математических операциях C ++.

1

Другие решения

Встроенные функции SSE и AVX занимают до 256 байт, учитывая современный процессор. Они названы __m128i а также __m256i,

1

128-битное целое число — это действительно большое целое число. Вы должны реализовать свой собственный тип данных. Вы можете создать массив shorts, храните там числа (цифры) и применяйте умножение, как вы делаете это в своей математической записной книжке, это, вероятно, самый простой подход.

введите описание изображения здесь

Этот не закончен, конечно! «2» все еще отсутствует;)

0