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

在C语言中能否不使用循环实现将'1'打印n次?

在C语言中实现类似Python print("1"*n) 的高效方法

要在C语言里实现高效重复打印单个字符(或字符串)且时间复杂度为O(n),可以用以下几种实用方法:

方法1:memset + fwrite(推荐,跨平台且高效)

这是性能最优的方案之一,利用底层优化的内存填充函数批量生成字符,再通过批量写入函数输出,避免多次I/O调用的开销。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    int n = 10; // 替换为你需要的重复次数
    char *buf = malloc(n + 1); // 额外分配1字节用于换行符(可选)
    
    if (!buf) {
        perror("malloc failed");
        return 1;
    }
    
    memset(buf, '1', n); // 将buf前n个字节填充为'1'
    buf[n] = '\n'; // 若不需要换行可删除此行,并调整fwrite的长度
    
    // 一次性写入所有内容到标准输出
    fwrite(buf, sizeof(char), n + 1, stdout);
    
    free(buf);
    return 0;
}
  • 优势:memset和fwrite都是经过编译器/系统优化的函数,执行效率极高,时间复杂度严格为O(n)。
  • 注意:记得检查malloc的返回值,避免内存分配失败。

方法2:利用GNU C扩展的printf格式技巧

如果你使用GNU C环境(比如GCC),可以借助格式符的扩展特性实现,但兼容性稍差:

#include <stdio.h>

int main() {
    int n = 10;
    // 利用复合字面量生成足够长的'1'字符串,再通过%.*s截取前n个字符输出
    printf("%.*s\n", n, (char[1024]){[0 ... 1023] = '1'});
    return 0;
}
  • 注意:复合字面量的长度要大于等于n,否则会读取越界内存。这种方式适合小范围的n值。

方法3:循环写入(简单但性能稍差)

如果不想使用动态内存,直接循环调用字符输出函数也是可行的,但频繁的系统调用会增加开销:

#include <stdio.h>

int main() {
    int n = 10;
    for (int i = 0; i < n; i++) {
        putchar('1');
    }
    putchar('\n');
    return 0;
}
  • 优化点:如果是单线程环境,可以用putchar_unlocked替代putchar,减少线程安全带来的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:32:17