C语言实现如下功能 从 控制台 输入一个十进制 signed int类型的整数(假设 所在编译机器 中 signed int类型 对应的 长度32位) 程序中 需要对用户 从控制台 的 输入做合法性校验,如果输入是非法十进制整数,则控制台输出“err”的提示。如果是输入是合法十进制的整数,则控制台输出对应的逆序字符串。 举例: 1、例如控制台 输入123,则输出字符串”321″ 2、例如控制台 输入-123,则输出字符串”-321″ 3、例如控制台 输入12a,则输出"err" 4、例如控制台 输入12.5,则输出"err" 要求: 1、不使用堆内存分配函数。提醒注意:计算机里面补码能表示的数字的最大范围。
时间: 2024-02-17 12:04:43 浏览: 70
计算机组成原理之C语言类型转换
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#include <limits.h>
int main() {
char input[20], output[20];
scanf("%s", input);
int len = strlen(input);
int is_negative = 0;
if (input[0] == '-') {
is_negative = 1;
len--;
}
long long num = 0;
for (int i = is_negative; i < strlen(input); i++) {
if (input[i] >= '0' && input[i] <= '9') {
num = num * 10 + (input[i] - '0');
if (num > INT_MAX) {
printf("err\n");
return 0;
}
} else {
printf("err\n");
return 0;
}
}
sprintf(output, "%lld", num);
if (is_negative) {
printf("-");
}
for (int i = len - 1; i >= 0; i--) {
printf("%c", output[i]);
}
printf("\n");
return 0;
}
```
程序首先读入十进制的 signed int 类型的整数,然后检查输入是否合法。如果输入的字符串以负号开头,则将其标记为负数,并将字符串长度减1。接着使用循环遍历整个字符串,将每个数字字符转换为整数,并将其累加到 `num` 变量中。在累加时需要注意判断 `num` 是否已经大于 `INT_MAX`,如果大于则说明超过了 signed int 类型的存储范围,此时应输出 "err" 并返回。如果在遍历过程中发现字符串中有非数字字符,则说明输入不合法,应输出 "err" 并返回。最后使用 `sprintf` 函数将 `num` 转换为字符串,并按照逆序输出字符串。
需要注意的是,在 signed int 类型的范围内,负数的表示范围比正数多一位,因此需要使用 `long long` 类型来存储输入的数字。同时,在计算 `num` 时,需要先判断是否已经超过 `INT_MAX`,否则会导致计算错误。
阅读全文