我目前使用可能(或显然)有点幼稚的方法,通过除以十来连续计算模数和余数。
然后你应该有O(n^2)
复杂性,它应该比 15 分钟好得多。
虽然,值得看看你是如何精确地除以10
.
- 确保您应用的不是long by long 的通用除法,而是更简单的long 数除法算法。
- 确保重用内存。分配 10Kb 块 10000 次肯定会妨碍您的性能。
编辑
如何一次将长二进制数除以 10 并获得结果和提醒。没有额外的内存。
简单伪代码(a[0]
是最高位)
int r = 0;
for (int i = 0; i < n; ++i) {
r = r * 2 + a[i];
a[i] = r / 10;
r = r % 10;
}
举个例子,数字100111011 = 315
。
第 0 步:r = 1, a[0] = 0
第 1 步:r = 2, a[1] = 0
第 2 步:r = 4, a[2] = 0
第 3 步:r = 9, a[3] = 0
第 4 步:r = 9, a[4] = 1
第 5 步:r = 9, a[5] = 1
第 6 步:r = 8, a[6] = 1
第 7 步:r = 7, a[7] = 1
第 8 步:r = 5, a[8] = 1
所以,提醒是5
,结果是000011111 = 31
。