algorithm - 如何检查大十进制数是否可以除以 2^x 或 5^x

标签 algorithm division modulus

<分区>

我有一个大十进制数 N (最多 100.000 位)我需要检查是否 N可以除以2^X5^X ( 0 < X < 5 ) .

bignumber % (2^x) == 0

我能得到小费吗?我不知道。

最佳答案

检查由最后 x 位数字组成的数字。如果它可以除以 2^x,那么所有数字也可以。 5^x 也一样。

原因是一个最后有 x 个零的十进制数总是可以被 2^x 或 5^x 除,因为它可以被 10^x 除。因此,我们可以忽略起始数字,只检查最后 x 个数字。

用于检查整除性用途

char* number; // here the source number is put

strcopy(ending, &number[strlen(number) - x]);
long CheckedNumber = atoi(ending);

long NewCheckedNumber;
int i=0;
while (i<x){
  NewCheckedNumber = CheckedNumber / 5;
  if ( NewCheckedNumber * 5 != CheckedNumber ) return 0;
  CheckedNumber = NewCheckedNumber;
  i++;
}
return 1; 

关于algorithm - 如何检查大十进制数是否可以除以 2^x 或 5^x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44904752/

相关文章:

python - 将 ndarray 除以标量 - Numpy/Python

python - 为什么 (-3//2 = -2)

operator-keyword - 负模运算符结果的目的是什么?

algorithm - Raft:如何解决leader节点的性能瓶颈?

algorithm - 大 O 复杂度 O(n log n) vs O(n log m)

java - 数组的排列

c - 实现回溯 N 皇后算法

经过太多的划分后,Python 将变为 0.0

C编程 : Does Modulus Ignore Leading Zeros in Result ? 如何停止?

java - 简单的Java模数问题