#include <stdio.h>
int main(void) {
int d, i1, i2, i3, i4, i5, j1, j2, j3, j4, j5, first_sum, second_sum, total;
printf("Enter the first single digit : ");
scanf("%1d", &d);
printf("Enter the first group of five digits : ");
scanf("%1d%1d%1d%1d%1d",&i1, &i2,&i3, &i4, &i5 );
printf("Enter the second group of five digits : ");
scanf("%1d%1d%1d%1d%1d",&j1, &j2,&j3, &j4, &j5 );
first_sum = d + i2 + i4 + j1 + j3 + j5;
second_sum = i1 + i3 + i5 + j2 + j4;
total = 3 * first_sum + second_sum;
printf("check digit : %d\n : ", 9 - ((total - 1) % 10)); // 9 - ((total - 1) % 10))
return 0;
}
这是我的代码,我的输入是
Enter the first single digit : 0
Enter the first group of five digits : 13800
Enter the second group of five digits : 15173
如果我改变配方9 - ((total - 1) % 10)
变成10 - (total % 10)
我认为在某些情况下会有不同的结果如果总数是10,我会得到不同的结果
但我该怎么跟别人解释呢?
我在我的书上计算过,我在谷歌上搜索过,但我不知道。
3条答案
按热度按时间kr98yfug1#
假设
total > 0
,让我们用10x+y
替换total
,其中y
是一位数值。所有正
total
的公式不相同。当total > 0
的最后一位为零时失败。nr7wwzry2#
这两个公式是不同的,有数学规律,比如bodmass规则,来决定加/减/乘/除哪一个先发生。除此之外,c语言中也有左右优先。但是,有时候你得到相同的答案,只是因为巧合。
如果你能在代码中准确地说明你应该执行什么,那么我们可以根据你的要求帮助你提供一个合适的公式。
cgvd09ve3#
对于正的
total
,两个公式都产生total
模10的余数,除了当total
是10的倍数时,前者产生0而后者产生10:|
total
的剩余部分|第一公式|第二公式|| - ------|- ------|- ------|
| 无|无|十个|
| 1个|1个|1个|
| 第二章|第二章|第二章|
| 三个|三个|三个|
| 四个|四个|四个|
| 五个|五个|五个|
| 六个|六个|六个|
| 七|七|七|
| 八个|八个|八个|
| 九|九|九|
为了理解这一点,我们将
total
写成10*q+r
,其中r
是模10的余数,所以0 ≤r
〈10。例如,如果total是123
,它等于10*12 + 3
。首先,让我们考虑0〈r
的情况。然后:9 - ((total - 1) % 10)
中,用10*q+r
替换total
得到9 - ((10*q+r - 1) % 10)
,它等于9 - (r-1)
=10 - r
。10 - (total % 10)
中,用10*q+r
替换total
得到10 - (10*q + r) % 10
,它等于10 - r
。因此,对于0〈
r
,两个公式给出相同的结果,现在考虑0 =r
的情况,则:9 - ((total - 1) % 10)
等于9 - (10*q + 0 - 1) % 10
,后者等于9 - 9 % 10
,后者为0。10 - (total % 10)
等于10 - (10*q + 0) % 10
,10 - (10*q + 0) % 10
等于10 - 0 % 10
,也就是10。因此,只要总和模10的余数不为零,这两个公式就产生相同的值,而当余数为零时,第一个公式产生0,第二个公式产生10。