如何处理不适合任何语言数据结构的大整数

sin*_*nan 14 c algorithm biginteger arbitrary-precision data-structures

我正在尝试解决编程竞赛的初步问题以及我必须计算的两个问题,并打印一些非常大的整数(如100!,2 ^ 100).

我还需要一种快速计算这个大整数的能力的方法.

你可以为我建议一些算法或数据结构吗?(顺便说一下,我读过C接口和实现的'任意精度算术'部分,但它对pow()没有帮助)

编辑:我认为通过平方法和位移的取幂对功率起作用,但我还需要一种快速的方法来计算这个因子的阶乘.谢谢.

EDIT2:对于那些感兴趣的人;

找到包含长度为N的所有位串的最短位串长度(对不起我的英文,我举一个例子).N <= 10000

例如,包括长度为2(00,01,10,11)的所有比特串的最短比特串长度是5(11001).

我对这个问题的解决方案是2 ^ n + n - 1.(所以我应该计算2的幂,我想我会使用位移)

其他问题是,给定2个长度,找到你可以通过多少种方式达到长度N.例如,输入是10,2,3.那么你应该用2和3达到10(例如,2 + 3) 2 + 2 + 2 + 2,2 + 2 + 3 + 3,3 + 2 + 2 + 3,3 + 3 + 2 + 2 ......).1 <= N <2 ^ 63.我们将在mod 1000000007中计算anwser.

我的解决方案是,2x + 3y = N,所以x =(N - 3y)/ 2.对于从0到2*N/3的y,如果x是一个整数,那么我应该计算这个X和Y的广义置换,总计+ =(x + y)!/(x!*y!).

jon*_*sca 0

对于 C 来说,这样的东西可以工作,或者使用 int 或 char 数组来滚动你自己的数组,数组中的一个点代表一个数字。 [1 | 0 | 1]['1'|'0'|'1']101 等