问题描述
问题:
通过键盘输入 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;
如果 x
是 1234
,x / 100
是 1234 / 100
或 12
(和余数 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 在他的回答中指出的那样,模运算符完成了所有工作。