最直接的整数拆位方法是用 % 和 / 循环:n%10取个位,n/10去个位;需特判n==0、负数取abs(但int_min需单独处理),结果逆序存vector后反转;相比to_string,算术法更高效无内存开销,但健壮性稍差。
用 % 和 / 在循环中逐位提取数字
整数拆位最直接的方式就是反复对 10 取余再整除,适用于非负整数。核心逻辑是:n % 10 得个位,n / 10 去掉个位,继续下一轮。
注意:C++ 中整数除法向零截断,所以对正数安全;负数需先取绝对值,否则 -123 % 10 是 -3(不是 7),不符合“每一位数字”的直观预期。
- 必须先处理
n == 0的边界情况,否则循环不执行,结果为空 - 得到的数字顺序是个位→十位→百位…,若需从高位开始(如输出或存入数组),得反转容器或用栈
- 推荐用
std::vector<int></int>存结果,避免手动管理数组大小
int n = 1234;
std::vector<int> digits;
if (n == 0) digits.push_back(0);
else {
int t = std::abs(n); // 处理负数
while (t != 0) {
digits.push_back(t % 10);
t /= 10;
}
std::reverse(digits.begin(), digits.end()); // 恢复高位在前
}
为什么不用 std::to_string 转字符串再遍历?
虽然 std::to_string(n) + 遍历字符更简洁,但它引入了字符串分配、内存拷贝和字符到数字的转换开销,在嵌入式或高频调用场景下不划算。
纯算术方法无动态内存、无类型转换,编译器也更容易优化。但如果你只是临时调试或处理少量数据,std::to_string 更不易出错:
立即学习“C++免费学习笔记(深入)”;