所以我在 SPOJ [ C language
] 上解决了一些最初的问题,然后它说要输入一个 500-1000 位的数字。
我所做的是将数据输入一个字符数组并将每个数字存储为一个字符。但是现在,如果我必须对输入进行一些数学计算,我必须将每个输入视为一个字符,然后从中减去 48 [ASCII 为 0],然后逐位解决问题。
有一个更好的方法吗?
所以我在 SPOJ [ C language
] 上解决了一些最初的问题,然后它说要输入一个 500-1000 位的数字。
我所做的是将数据输入一个字符数组并将每个数字存储为一个字符。但是现在,如果我必须对输入进行一些数学计算,我必须将每个输入视为一个字符,然后从中减去 48 [ASCII 为 0],然后逐位解决问题。
有一个更好的方法吗?
最大的优化是将数字表示为字节数组,使用基数 256,所以数字是(使用 ^ 作为指数):
N = n[0]*256^0 + n[1]*256^1 + n[2]*256^2 + ...
这样你使用最少的内存。
在现实生活中,您可以使用GMP,这是一个开源的大数库。