我正在尝试迭代一些数字02100021,这是一个路由号码,如果它是一个正确的路由号码需要验证。因此我使用ABA路由号码验证检查为3 *(d1 + d4 + d7)+ 7 *(d2 + d5 + d8)+(d3 + d6 + d9)其中mod 10 = 0
由于我有整数类型的数字,我的第一个问题是如何迭代这个数字,其中包含0,或者是否有一些更简单的方法来迭代模式并将其乘以这样的数字。
由于
答案 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也不会溢出。