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

如何使用putchar函数打印0到20及更大范围的数字?

使用putchar打印多位数的解决方案

你遇到的问题核心是:putchar只能输出单个ASCII字符,当你用'0' + n时,只有n在0-9范围内,结果才对应数字字符'0'-'9';n>=10时,'0' + n会变成其他ASCII字符(比如'0'+10是':'),自然无法正确显示数字。

要打印大于9的数字,必须把多位数拆分成单独的每一位,再逐个用putchar输出。下面提供两种常用实现方式:

方法1:递归拆分(代码简洁)

递归的思路是先处理高位数字,再输出当前个位,比如打印20时,先递归处理2,再打印0:

#include <stdio.h>

void print_num(int num) {
    // 先处理高位:如果num大于等于10,先打印高位部分
    if (num / 10 != 0) {
        print_num(num / 10);
    }
    // 打印当前个位
    putchar('0' + num % 10);
}

int main() {
    for (int i = 0; i <= 20; i++) {
        print_num(i);
        putchar(' '); // 加空格分隔数字
    }
    return 0;
}

方法2:循环拆分(非递归,适合避免递归深度问题)

如果要打印极大的数字(比如超过递归栈深度的范围),可以用循环拆分每一位,存入数组后逆序输出(因为取余得到的是从个位开始的数字):

#include <stdio.h>

void print_num(int num) {
    // 特殊处理0:避免循环不执行导致无输出
    if (num == 0) {
        putchar('0');
        return;
    }
    
    int digits[20]; // 足够存储int范围内的所有数字位数
    int count = 0;
    
    // 拆分每一位,从个位开始存入数组
    while (num > 0) {
        digits[count++] = num % 10;
        num = num / 10;
    }
    
    // 逆序输出数组,得到正确的数字顺序
    for (int i = count - 1; i >= 0; i--) {
        putchar('0' + digits[i]);
    }
}

int main() {
    for (int i = 0; i <= 20; i++) {
        print_num(i);
        putchar(' ');
    }
    return 0;
}

扩展:处理负数

如果需要打印负数,只需先输出'-'符号,再处理绝对值部分:

void print_num(int num) {
    if (num < 0) {
        putchar('-');
        num = -num; // 转为正数处理
    }
    // 后续逻辑同上面的递归或循环代码
}

内容的提问来源于stack exchange,提问作者ben_code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:02:42