如何在c中编写程序以使用移位运算符分割大数?使用移位运算符分割大数十进制数
例如,我们需要像12345678拆分大量成只使用位移运算两个较小的数字1234和5678,而不是使用常规的N = N * 10和N = N%10技术。你会怎么做?
如何在c中编写程序以使用移位运算符分割大数?使用移位运算符分割大数十进制数
例如,我们需要像12345678拆分大量成只使用位移运算两个较小的数字1234和5678,而不是使用常规的N = N * 10和N = N%10技术。你会怎么做?
您可以使用标准的长分区算法,并使用12345678和10000来调用它。如果您想优化它仅用10000进行除法,则需要手动预先评估它为b == 10000。
void div(int a, int b) {
int d, res;
d = 1;
res = 0;
while (b > 0 && b < a) {
b <<= 1;
d <<= 1;
}
do {
if (a >= b) {
a -= b;
res += d;
}
b >>= 1;
d >>= 1;
} while (d);
printf("Result: %d, reminder: %d\n", res, a);
}
int main() {
div(12345678, 10000);
}
您可以将数字转换为BCD表示形式,然后使用移位操作将它们拆分为两个变量。
BCD Conversion仅使用移位运算符。
您是否需要在面试时签署保密协议? – paxdiablo 2014-09-20 05:31:36
“split”是什么意思?给出一个简单的例子,用数字 – chouaib 2014-09-20 05:32:41
* *号码或**任何**号码的数字计数均匀地除以两位? (后者的完成是特别重要的问题)。 – WhozCraig 2014-09-20 06:35:34