C语言如何将数字列表转换为对应的整数
C语言数字列表转对应整数实现方案
核心实现逻辑
初始设置结果变量为0,逐个遍历数字列表中的每一位数字,每次迭代执行结果 = 结果 * 10 + 当前位数字的计算即可:每乘10相当于把已有的数值左移一位,空出个位位置存放新的数字。
注意事项
- 列表中每个元素必须是0~9的单个有效数字,否则计算结果不符合预期
- 需考虑整数溢出问题,转换前可以提前判断避免结果越界,溢出判断逻辑说明:
res > (LLONG_MAX - nums[i]) / 10等价于预判res * 10 + nums[i] > LLONG_MAX,提前在计算前做判断可以避免实际执行溢出运算导致的未定义行为。
完整示例代码
#include <stdio.h> #include <limits.h> // 参数说明:nums是数字列表数组,len是数组长度 long long nums_to_int(const int *nums, int len) { // 校验输入合法性 if (nums == NULL || len <= 0) { return -1; // 错误标识,可根据自身需求调整错误返回值 } long long res = 0; for (int i = 0; i < len; i++) { // 校验单个数是否为合法数字 if (nums[i] < 0 || nums[i] > 9) { return -1; } // 溢出校验,防止结果超过long long最大值 if (res > (LLONG_MAX - nums[i]) / 10) { return -1; // 溢出错误 } res = res * 10 + nums[i]; } return res; } int main() { int test_nums[] = {1,6,3,2,5}; int len = sizeof(test_nums) / sizeof(test_nums[0]); long long result = nums_to_int(test_nums, len); if (result == -1) { printf("转换错误\n"); } else { printf("转换结果:%lld\n", result); // 输出为16325 } return 0; }
如果你的数值范围比较小,不需要考虑超过int最大值的情况,也可以把返回值改成int,溢出判断逻辑对应的换成INT_MAX即可。
内容的提问来源于stack exchange,提问作者nicknickC
相关产品推荐
相关产品推荐

