如何使用shift运算符在c中编写程序来分割大数?
例如,我们需要仅使用位移操作将12345678这样的大数字分成两个较小的数字1234和5678,而不使用正常的n = n * 10和n = n%10技术。你会怎么做?
答案 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仅使用移位运算符。