2014-09-20 79 views
4

如何在c中编写程序以使用移位运算符分割大数?使用移位运算符分割大数十进制数

例如,我们需要像12345678拆分大量成只使用位移运算两个较小的数字1234和5678,而不是使用常规的N = N * 10和N = N%10技术。你会怎么做?

+4

您是否需要在面试时签署保密协议? – paxdiablo 2014-09-20 05:31:36

+0

“split”是什么意思?给出一个简单的例子,用数字 – chouaib 2014-09-20 05:32:41

+0

* *号码或**任何**号码的数字计数均匀地除以两位? (后者的完成是特别重要的问题)。 – WhozCraig 2014-09-20 06:35:34

回答

1

您可以使用标准的长分区算法,并使用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); 
} 
0

您可以将数字转换为BCD表示形式,然后使用移位操作将它们拆分为两个变量。

BCD Conversion仅使用移位运算符。

+1

如何在不使用除法的情况下进行BCD转换? – Basilevs 2014-09-20 07:48:16

+0

BCD转换添加到答案。 – 2014-09-20 10:19:23

+0

提供链接文章的摘录。 http://stackoverflow.com/help/how-to-answer – Basilevs 2014-09-20 12:30:47