C语言如何将用户输入整数的每一位数字单独存储到数组中
整数按位拆分存入数组的最优方案
常规通过整型变量读取、取余拆分的方案受限于int、long long等类型的存储上限,输入数值超过类型最大值就会溢出报错,且拆分后得到的数字是逆序的,需要额外做反转操作才能符合需求。
推荐直接将输入作为字符串读取处理,完全规避溢出问题,且天然得到正序的数字数组:
实现代码
#include <stdio.h> #include <string.h> #include <ctype.h> int main() { // 可根据需求调整数组长度,支持任意长度的数字输入 char input_str[128]; int digits[128]; int input_len, i; printf("请输入整数:"); // 读取输入为字符串,若要避免输入溢出可替换为fgets(input_str, sizeof(input_str), stdin) scanf("%s", input_str); input_len = strlen(input_str); for (i = 0; i < input_len; i++) { // 可选校验:判断输入是否为纯数字 if (!isdigit(input_str[i])) { printf("输入包含非法非数字字符,终止运行\n"); return 1; } // 利用ASCII编码规则,字符转对应整数值存入数组 digits[i] = input_str[i] - '0'; } // 测试输出 for (i = 0; i < input_len; i++) { printf("digits[%d] = {%d}\n", i, digits[i]); } return 0; }
方案优势
- 不受整型长度限制,仅需调整数组长度即可支持超长数字输入,完美适配209377383838这类超出
long long上限的数值 - 无需额外做数组反转操作,拆分得到的数字顺序和输入顺序完全一致,直接符合
digits[0]存储最高位的需求 - 逻辑简单易懂,执行效率更高
内容的提问来源于stack exchange,提问作者thompsonrapier
相关产品推荐
相关产品推荐

