求助:如何实现逐行打印正整数的每一位十进制数字?
解决方案:逐行打印正整数的每一位
核心思路说明
要实现逐行打印正整数的每一位,%10和/10是关键操作:
number % 10:提取当前数字的最后一位number / 10:去掉当前数字的最后一位(整数除法)
针对你遇到的循环终止问题,不需要固定循环次数,只需在number变为0时停止循环即可。下面提供三种可行的实现方式:
方式1:递归实现(最简洁)
利用递归的特性,先处理高位部分,再打印当前最低位,自然实现从高位到低位的输出:
#include <iostream> using namespace std; // 定义打印函数 void printDigits(int number) { if (number >= 10) { // 先递归处理除最后一位外的部分 printDigits(number / 10); } // 打印当前最后一位 cout << number % 10 << endl; } int main() { int num; cout << "输入正整数:"; cin >> num; printDigits(num); return 0; }
方式2:循环+权值计算(非递归,从高位到低位)
先计算数字的最高位权值,再逐位提取打印:
#include <iostream> using namespace std; void printDigits(int number) { int divisor = 1; // 计算最高位的权值(比如13456的权值是10000) while (number / divisor >= 10) { divisor *= 10; } // 逐位打印 while (divisor > 0) { cout << (number / divisor) << endl; number %= divisor; // 去掉当前最高位 divisor /= 10; // 权值降一位 } } int main() { int num; cout << "输入正整数:"; cin >> num; printDigits(num); return 0; }
方式3:用vector存储后反向输出
先提取所有低位存入vector,再反转后打印:
#include <iostream> #include <vector> #include <algorithm> using namespace std; void printDigits(int number) { vector<int> digits; // 提取每一位(从低位到高位) while (number > 0) { digits.push_back(number % 10); number /= 10; } // 反转顺序,转为高位到低位 reverse(digits.begin(), digits.end()); // 逐行打印 for (int digit : digits) { cout << digit << endl; } } int main() { int num; cout << "输入正整数:"; cin >> num; printDigits(num); return 0; }
你现有代码的问题说明
- vector下标越界:直接用
fordivide[i] = divide时,vector是空的,没有分配空间,会导致运行错误,应该用push_back添加元素。 - 固定循环次数:硬写
i < 5无法适配不同位数的数字,正确的终止条件是当number变为0时停止循环。 - 逻辑混乱:没有正确组合
%10和/10来提取每一位,这两个操作需要配合循环,才能依次获取所有数字位。
内容的提问来源于stack exchange,提问作者ThebananaMan
相关产品推荐
相关产品推荐

