对一个数字的各个位上的数字分别取余数并相加,然后再对结果取余数的操作称为"数字根"运算,也称为"数根"运算。这是因为最终结果通常是一个介于 1 到 9 之间的数字,即根据该数字的位数重复执行上述步骤,直到得到一个个位数的数字为止。
这个原理基于数学中的数字特性,其中每个数字对 9 取余数的结果与该数字本身对 9 取余数的结果相同。
例如,考虑一个两位数 ab(a 是十位,b 是个位),它可以表示为 10a + b。对于 10a + b 对 9 取余数,得到 (10a + b) % 9 = (9a + a + b) % 9 = (a + b) % 9。因此,ab 对 9 取余数的结果与 a + b 对 9 取余数的结果相同。
这一性质适用于任何数字,不仅限于两位数。因此,我们可以通过重复对数字的各个位上的数字取余数并相加,最终得到一个介于 1 到 9 之间的数字。
【参考程序】
int numMod(char s[], int k) {
int c[35] = {0};
int len = strlen(s);
for (int i = 0; i < len; i++) {
c[i] = s[i] - '0';
}
int res = 0;
int newNum = 0;
//求余数
for (int i = 0; i < len; i++) {
newNum = res * 10 + c[i];
res = newNum % k;
}
return res;
}