C语言实现: 舍九法验证加法的正确性

开篇

舍九法的核心思想是利用模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);
	}
}

因为上面的代码比较清晰易懂,这里就不多做解释了,希望本文对您所有帮助!
感谢阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值