Мне нужно умножать очень большие числа, сделал это через алгоритм Карацубы, но переменные просто не могут их вместить в себя. Как можно преодолеть это ограничение? Код:
long int Karatsuba(int A, int B) { // 2n n
string Astr = to_string(A);
string Bstr = to_string(B);
unsigned long int a, b, c, d, sizeA = Astr.size(), sizeB = Bstr.size();
if (sizeA == 1 || sizeB == 1) return A * B;
unsigned long int n = max(sizeA, sizeB);
a = A / static_cast<long int>(pow(10, n / 2));
b = A % static_cast<long int>(pow(10, n / 2));
c = B / static_cast<long int>(pow(10, n / 2));
d = B % static_cast<long int>(pow(10, n / 2));
unsigned long int p1 = Karatsuba(a, c);
unsigned long int p2 = Karatsuba(b, d);
unsigned long int p3 = Karatsuba(a, d) + Karatsuba(b, c);
return pow(10, n) * p1 + pow(10, n / 2) * p3 + p2;
}
Пример чисел, которые нужно переменожить: 3141592653589793238462643383279502884197169399375105820974944592 * 2718281828459045235360287471352662497757247093699959574966967627
Классика жанра для работы с длинными числами это GMP. Но есть и другие варианты.
Как-то мне тоже понадобилась длинная арифметика. Но использовать GMP было нельзя, так как длинная арифметика нужна была для микроконтроллеров без операционной системы и кучи. Пришлось написать свою библиотеку С++ шаблонов для работы с длинными целыми числами. Вот ссылка:
https://sourceforge.net/projects/muntl/?source=frontpage&position=5
Там в архиве есть и описание на русском языке.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задается 2 массива a и b, нужно вывести массив имеющий наименьшее кол-во положительных элементовПример: Массив a { 1, 2,3}, массив b { -4, -5, 6} программа...
Есть Windows API окно обернутое в класСоздается в Windows API main методе например так:
Всем привет! Может кто сталкивался или знает куда копать?