开篇
舍九法的核心思想是利用模9的同余性质。对于任何整数 n,我们可以通过求其各位数字之和来得到与 n 同余的一个数(模9)。换句话说,如果你不断地将一个数的各位数字相加直到得到一个个位数,那么这个结果在模9下与原来的数是同余的。
举个例子来说:
整数n = 47, 假设a = 21,b=26,此时a+b=n;
此时n的模九值,sd(n)=4+7=11,此时11>9,继续模九,sd(11)=2,也就是n的模九值为2;
同理,a的模九值,sd(a)=2+1=3;b的模九值,sd(b)=8,此时sd(a)+sd(b)=11,11大于9,继续模九,sd(11)=1+1=2;
能看出,两者是相同的,也就证明了21+26=47的正确性。
值得一提的是,这里sd是我自定义的一个东西,可以理解成函数名,并不是数学里的定义。
代码实现
#include <stdio.h>
// 计算一个整数的舍9值(模9值)
int mod9(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;// 加上每一位数字
n /= 10;
}
// 如果sum > 9, 继续计算
while (sum > 9) {
int tempSum = 0;
while (sum > 0) {
tempSum += sum % 10;
sum /= 10;
}
sum = tempSum;
}
return sum;
}
// 利用舍9法验证加法的正确性
int varifyAddition(int a, int b, int c) {
int mod9_a = mod9(a);
int mod9_b = mod9(b);
int mod9_c = mod9(c);
// 计算a+b的模9值
int mod9_sum = mod9_a + mod9_b;
if (mod9_sum > 9) {
mod9_sum = mod9(mod9_sum);
}
return mod9_sum == mod9_c;
}
int main() {
int a, b, c;
// 输入a,b,c的值
printf("请输入第一个整数的值a: ");
scanf_s("%d", &a);
printf("请输入第二个整数的值b: ");
scanf_s("%d", &b);
printf("请输入加法结果c: ");
scanf_s("%d", &c);
// 验证加法的正确性
if (varifyAddition(a, b, c)) {
printf("%d+%d=%d是正确的.\n", a, b, c);
}
else {
printf("%d+%d=%d是错误的.\n", a, b, c);
}
}
注
因为上面的代码比较清晰易懂,这里就不多做解释了,希望本文对您所有帮助!
感谢阅读。