如何在C中迭代int时得到0的数字

时间:2011-12-30 15:56:43

标签: c

我正在尝试迭代一些数字02100021,这是一个路由号码,如果它是一个正确的路由号码需要验证。因此我使用ABA路由号码验证检查为3 *(d1 + d4 + d7)+ 7 *(d2 + d5 + d8)+(d3 + d6 + d9)其中mod 10 = 0

由于我有整数类型的数字,我的第一个问题是如何迭代这个数字,其中包含0,或者是否有一些更简单的方法来迭代模式并将其乘以这样的数字。

由于

1 个答案:

答案 0 :(得分:3)

如果我理解正确,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] = digit * 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也不会溢出。