【发布时间】:2018-08-26 11:54:47
【问题描述】:
#include <stdio.h>
int reverse(int);
int reverse(int x) {
int negative = 0;
if (x < 0)
negative = x;
if (negative != 0) {
x = 0 - x;
}
int y = 0, temp;
while (x > 0) {
temp = x % 10;
x = x / 10;
y = (y * 10) + temp;
}
if (negative == 0) {
return y;
} else {
return 0 - y;
}
}
int main() {
int x, y;
printf("Enter your number: \n");
scanf("%d", &x);
y = reverse(x);
printf("The reversed number is: %d\n", y);
return 0;
}
这个程序反转一个有符号整数。我无法检查受尊敬的整数 y 是否超出范围。我无法清楚地了解溢出的主题。如果我要求编译器使用 scanf 扫描一个整数并输入一个超出整数范围的整数,会发生什么?值在存储时会发生变化吗?
【问题讨论】:
-
您需要设计一个示例并尝试一下。这是一个您可以通过反复试验自行回答的问题。
-
"这个程序反转一个有符号整数。"这是什么意思?
-
@nicomp:反复试验只揭示了一个 C 实现的功能(或尽可能多的实现),而不是 C 标准所说的。
-
@Stargateur:从代码中可以清楚地看出,他们正在反转数字的十进制数字中的有效数字。
-
@EricPostpischil 我“应该”不需要阅读代码来理解;)但是反转一个数字在数学上没有多大意义,所以我要求澄清这些信息。跨度>
标签: c integer-overflow