用 C 语言实现顺序打印某一自然数/整数的每位数字
递归
分析: 欲知某一整数的每个位上的数字,我们需要通过除法或者取余(模运算)的方式获得。
- 提取每一位
- /10 %10 可依此提取整数的最高位到最低为
- 先提取最低为
步骤:
- 提取每一位
- 每次取出最低位
- 用 % 10
- 每次取出最低位
2.缩小数字规模:
- 再将该数 /10 ,以去除上一步取到的最低位
- 继续循环 直到商为0
3. 此时的数字用 % 10取出当前数字的最低位
实现
#include <stdio.h>
/**
* 用 C 语言实现顺序打印某一自然数/整数的每位数字
* @return
*/
void print_Num(int n);
int main() {
print_Num(321);
printf("\nHello, World!\n");
return 0;
}
void print_Num(int n) {
// !!!结束条件
if (0 == n) {
return;
}
// 较高位
print_Num(n / 10);
// 最低为
printf("%d ", n % 10);
// return 0;
}
逆序
void print_Num2(int n) {
// !!!结束条件
if (0 == n) {
return;
}
// 最低为
printf("%d ", n % 10);
// 较高位
print_Num(n / 10);
// return 0;
}
#include <stdio.h>
/**
* 用 C 语言实现顺序打印某一自然数/整数的每位数字
* @return
*/
void print_Num(int n);
void print_Num2(int n); //逆序
void print_Num_Reverse(int n);
int main() {
print_Num(321);
printf("\n=====\n");
print_Num2(321);
printf("\n=====\n");
print_Num_Reverse(321);
printf("\nHello, World!\n");
return 0;
}
void print_Num_Reverse(int n) {
// 递归终止条件
if (n == 0) {
return;
}
// 先打印当前位(最低位)
printf("%d", n % 10);
// 如果不是最后一位,则添加空格分隔
if (n / 10 != 0) {
printf(" ");
}
// 递归调用,处理剩余的位数
print_Num_Reverse(n / 10);
}
迭代
逆序
/**
逆序
*/
void print_Num_no_recursion(int n) {
// 无
if (n == 0) {
return;
}
while (n > 0) {
// 先打印当前位(最低位)
printf("%d ", n % 10);
// 移除当前最低为,处理剩余的位数
n /= 10;
}
}
顺序
#include <stdio.h>
#include <stdlib.h> // 用于malloc和free
/**
* 用 C 语言实现顺序打印某一自然数/整数的每位数字
* @param n 输入的整数
*/
void print_Num_in_Order(int n) {
// 假设整数n的位数不会超过某个合理值(例如10位)
// 在实际应用中,你可能需要动态分配这个数组
int digits[10]; // 存储每一位数字的数组
int count = 0; // 记录数字的位数
// 首先,确定数字的位数,并填充数组
while (n > 0) {
digits[count++] = n % 10;
n /= 10;
}
// 然后,顺序打印数组中的数字
for (int i = count - 1; i >= 0; i--) {
printf("%d ", digits[i]);
}
printf("\n"); // 可选:在数字后打印换行符
}
int main() {
print_Num_in_Order(321);
printf("\nHello, World!\n");
return 0;
}