C++中如何将整数转换为整数数组?求更简便实现方案
整数转整数数组的实现方案
你的代码存在几个问题:循环条件n != 1逻辑错误(输入0会无限循环,输入末尾带0的数字虽能碰巧得到正确位数,但逻辑不通用),而且int arr[counter]属于变长数组,并非C++标准特性,移植性差。下面提供两种更简便可靠的实现方法:
方法一:字符串中转(最简洁)
利用字符串转换直接拆分数字,无需手动统计位数,还能轻松处理负数:
#include <iostream> #include <string> #include <vector> using namespace std; int main() { int n; cin >> n; string num_str = to_string(n); vector<int> digits; // 跳过负号(如果需要处理负数) size_t start_idx = num_str.front() == '-' ? 1 : 0; for (size_t i = start_idx; i < num_str.size(); ++i) { digits.push_back(num_str[i] - '0'); // 字符转数字,依赖ASCII码差值 } // 验证输出 for (int d : digits) { cout << d << " "; } cout << endl; return 0; }
这种方法代码量少,逻辑直观,vector比变长数组更符合C++规范,避免了手动统计位数的麻烦。
方法二:优化数学方法(不依赖字符串)
如果不想用字符串,修正统计位数的逻辑,用数学运算拆分数字:
#include <iostream> #include <vector> #include <cstdlib> // 用于abs函数 using namespace std; int main() { int n; cin >> n; // 单独处理输入0的情况 if (n == 0) { vector<int> digits = {0}; cout << 0 << endl; return 0; } int num = abs(n); // 处理负数,取绝对值 int temp = num; int digit_count = 0; // 正确统计位数:直到temp变为0 while (temp != 0) { temp /= 10; digit_count++; } vector<int> digits(digit_count); // 从高位到低位填充数组 for (int i = digit_count - 1; i >= 0; --i) { digits[i] = num % 10; num /= 10; } // 验证输出 for (int d : digits) { cout << d << " "; } cout << endl; return 0; }
这里用temp != 0作为循环条件,能正确统计所有非零数字的位数,输入0单独处理,负数通过abs取绝对值后再拆分,保证逻辑通用。
内容的提问来源于stack exchange,提问作者Vik
相关产品推荐
相关产品推荐

