Решил немного размяться перед серьезным проектом) пара слов о релизации: числа представлены в виде следующей структурки: Code: typedef struct bigint_t { BI_DATA data[BI_MAX_ORDERS]; BI_SIZE size; } BIGINT_T, *PBIGINT_T; bigendian (старший разряд справа) основание 0x10000. наверное идеальный вариант на 32 битных платформах. пример использования. Code: int _tmain(int argc, _TCHAR* argv[]) { BIGINT_T one_bigint = {{ 0xA123, 0xF11F, 0x1231 }, 3}; BIGINT_T two_bigint = {{ 0xFF12, 0xA234, 0x1}, 3}; BIGINT_T shl_result; BIGINT_T shr_result; BIGINT_T sum_result; BIGINT_T sub_result; BIGINT_T mul_result; BIGINT_T div_result; BIGINT_T div_b_result; BIGINT_T mod_result; printf("one_bigint = "); biprint(&one_bigint); printf("\r\ntwo_bigint = "); biprint(&two_bigint); printf("\r\nshr_bigint = "); bishr(&shr_result, &one_bigint, 2); biprint(&shr_result); printf("\r\nshl_bigint = "); bishl(&shl_result, &one_bigint, 3); biprint(&shl_result); printf("\r\nbigint_add = "); biadd(&sum_result, &one_bigint, &two_bigint); biprint(&sum_result); printf("\r\nbigint_sub = "); bisub(&sub_result, &one_bigint, &two_bigint); biprint(&sub_result); printf("\r\nbigint_mul = "); bimul(&mul_result, &one_bigint, &two_bigint); biprint(&mul_result); printf("\r\nbigint_div_b = "); bidiv_b(&div_b_result, &one_bigint, 0xFF12); biprint(&div_b_result); printf("\r\nbigint_div = "); bidiv(&div_result, &one_bigint, &two_bigint); biprint(&div_result); printf("\r\nbigint_mod = "); bimod(&mod_result, &one_bigint, &two_bigint); biprint(&mod_result); getchar(); return 0; } вроде "симпотично" получилось. Буду рад если кто нибудь что-нибудь подскажет или покритикует. Спасибо за внимание, надеюсь кому нибудь пригодится. P.S. особо не тестил, могут быть ошибки. source
самый лучший тест для длинной арифметики - шифрование / дешифрование RSA с длинными ключами. А также некоторые алгоритмы генерации ключей. там используются самый основные операции как раз.