【C | recursion】 用 C 语言实现顺序打印某一自然数/整数的每位数字

102 阅读2分钟

用 C 语言实现顺序打印某一自然数/整数的每位数字

递归

分析: 欲知某一整数的每个位上的数字,我们需要通过除法或者取余(模运算)的方式获得。

  1. 提取每一位
    • /10 %10 可依此提取整数的最高位到最低为
  2. 先提取最低为

步骤:

  1. 提取每一位
    • 每次取出最低位
      • 用 % 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;  
}