You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:37:07