我试图遍历一些编号02100021,这是一个路由编号,如果它是一个正确的路由编号,则需要进行验证。因此,我使用ABA路由号验证检查作为3*(d1+d4+d7)+7*(d2+d5+d8)+(d3+d6+d9),其中mod 10=0
因为我有整数类型的数字,所以我的第一个问题是如何用0来迭代这个数字,或者是否有更简单的方法来迭代模式并将其与这个数字相乘。
谢谢

最佳答案

如果我理解正确,7 * (d2, d5, d8)应该是7 * (d2 + d5 + d8)
模10的零不算数。

bool correct(long x) {
    long a = x / 10 + x / 10000 + x / 10000000L;
    long b = x / 100 + x / 100000L + x / 100000000L;
    long c = x / 1000 + x / 1000000L + x / 1000000000L;
    int aba_checksum = (int)((3 * a + 7 * b + c) % 10);
    return aba_checksum == 0;
}

更正为d[i]=数字*10^(9-i)
bool correct(long x) {
    long a = x / 100000000L + x / 100000L + x / 100;
    long b = x / 10000000L + x / 10000L + x / 10;
    long c = x / 1000000L + x / 1000L + x;
    int aba_checksum = (int)((3 * a + 7 * b + c) % 10);
    return aba_checksum == 0;
}

最后可以做模运算。
为了防止溢出(到负数),可以在前面这样做,即使超过7*b也不会溢出。

关于c - 在C中通过int进行迭代时如何获取数字的0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8681309/

10-11 23:18
查看更多