使用shift运算符拆分一个大的十进制数

时间:2014-09-20 05:28:32

标签: c data-structures bit-shift

  

如何使用shift运算符在c中编写程序来分割大数?

例如,我们需要仅使用位移操作将12345678这样的大数字分成两个较小的数字1234和5678,而不使用正常的n = n * 10和n = n%10技术。你会怎么做?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

BCD Conversion仅使用移位运算符。