我需要用C语言回答一个问题关于模运算符我会在下面列出它,我检查了问题的答案但无法理解

问题描述

问题:

通过键盘输入 4 位数字。编写一个 C 程序来打印一个新数字,其数字与原始数字相反。例如-
输入:1234 输出4321
输入:5982 输出2895

我的代码是:

#include <stdio.h>

int main()
{
    int x;
    printf("Enter number\n");
    scanf("%d",&x);
    int first_digit = x % 10;
    int second_digit = (x / 10) % 10;
    int third_digit = (x / 100) % 10;
    int fourth_digit = (x / 1000) % 10;
    int new_number = (first_digit * 1000) + (second_digit * 100) +
                     (third_digit * 10) + (fourth_digit * 1);
    printf("%d\n",new_number);
    return 0;
}

如果您能帮助我,将不胜感激!谢谢!解释一下这是如何反转数字的!

解决方法

例如

int third_digit = (x/100)%10;

如果 x1234x / 1001234 / 10012(和余数 34),并且 12 % 10 是2(商为 1)。

x / 100 的值为 x 除以 100(忽略任何小数,因为它都是整数)。
x % 10 具有 x 除以 10 的余数。

,

我会尝试在您的代码中向您解释它,例如输入 1234:

#include <stdio.h>

int main()
{
  int x;
  printf("Enter number\n");
  scanf("%d",&x);

  int first_digit  = x / 1;     // first_digit  = 1234
  int second_digit = x / 10;    // second_digit = 123
  int third_digit  = x / 100;   // third_digit  = 12
  int fourth_digit = x / 1000;  // fourth_digit = 1

  // obtain last digit
  first_digit  = first_digit  % 10;  // first_digit  = 4
  second_digit = second_digit % 10;  // second_digit = 3
  third_digit  = third_digit  % 10;  // third_digit  = 2
  fourth_digit = fourth_digit % 10;  // fourth_digit = 1

  first_digit  *= 1000;  // first_digit  = 4000
  second_digit *= 100;   // second_digit = 300
  third_digit  *= 10;    // third_digit  = 20
  fourth_digit *= 1;     // fourth_digit = 1

  // 4000 + 300 + 20 + 1 = 4321
  int new_number = first_digit + second_digit + third_digit + fourth_digit;
  printf("%d\n",new_number);
  return 0;
}

正如@pmg 在他的回答中指出的那样,模运算符完成了所有工作。