C语言 两个公式有什么区别?

bsxbgnwa  于 2023-03-07  发布在  其他
关注(0)|答案(3)|浏览(145)
#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,我会得到不同的结果
但我该怎么跟别人解释呢?
我在我的书上计算过,我在谷歌上搜索过,但我不知道。

kr98yfug

kr98yfug1#

假设total > 0,让我们用10x+y替换total,其中y是一位数值。

9 - ((total - 1) % 10))  ?==  10 - (total % 10)  Original
         9 - ((10x+y - 1) % 10))  ?==  10 - (10x+y % 10)  Substitute total with 10x+y
    10 - 1 - ((10x+y - 1) % 10))  ?==  10 - (10x+y % 10)  Substitute 9 with 10 - 1
       - 1 - ((10x+y - 1) % 10))  ?==     - (10x+y % 10)  Subtract 10

if y > 0 then
       - 1 - (     y - 1)         ?==     - (y)           Apply %
           -       y              ?==     -  y            -1 - -1 is 0
                   y               ==        y            Success (QED)

if y == 0 then
- 1 - ((10x+y        - 1) % 10))  ?==     - (10x+y % 10)  Copy line #4 above
- 1 - ((10x          - 1) % 10))  ?==     - (10x   % 10)  Let y == 0
- 1 - ((10(x-1) + 10 - 1) % 10))  ?==     - (10x   % 10)  Replace 10x with 10(x-1) + 10  
- 1 - ((10(x-1) +      9) % 10))  ?==     - (10x   % 10)  Replace 10 - 1 with 9
- 1 - ((               9)     ))  ?==     - (0)           Apply %
- 10                               ≠         0            Subtract and fail

所有正total的公式不相同。当total > 0的最后一位为零时失败。

nr7wwzry

nr7wwzry2#

这两个公式是不同的,有数学规律,比如bodmass规则,来决定加/减/乘/除哪一个先发生。除此之外,c语言中也有左右优先。但是,有时候你得到相同的答案,只是因为巧合。
如果你能在代码中准确地说明你应该执行什么,那么我们可以根据你的要求帮助你提供一个合适的公式。

cgvd09ve

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) % 1010 - (10*q + 0) % 10等于10 - 0 % 10,也就是10。

因此,只要总和模10的余数不为零,这两个公式就产生相同的值,而当余数为零时,第一个公式产生0,第二个公式产生10。

相关问题