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

整数转罗马数字:如何实现罗马数字单行输出且输入可换行?(已解决)

整数转罗马数字的输出格式问题解决

我有一项作业要求实现整数转罗马数字,最初写的C语言代码如下:

#include <stdio.h>

int main(){
    
    int N, i, a, num;
    
    (1<=N<=3000);
    
    scanf("%d", &N);
    for(i=0; i<N; i++){
        scanf("%d", &num);
        
        while (num != 0){
            if (num>=1000){
                printf("M\n");
                num -= 1000;
            }
            else if (num>=900){
                printf("CM\n");
                num -= 900;
            }
            else if (num>=500){
                printf("D\n");
                num -= 500;
            }
            else if (num>=400){
                printf("CD\n");
                num -= 400;
            }
            else if (num>=100){
                printf("C\n");
                num -= 100;
            }
            else if (num>=90){
                printf("XC\n");
                num -= 90;
            }
            else if (num>=50){
                printf("L\n");
                num -= 50;
            }
            else if (num>=40){
                printf("XL\n");
                num -= 40;
            }
            else if (num>=10){
                printf ("X\n");
                num -= 10;
            }
            else if (num>=9){
                printf ("IX\n");
                num -= 9;
            }
            else if (num>=5){
                printf ("V\n");
                num -= 5;
            }
            else if (num>=4){
                printf ("IV\n");
                num -= 4;
            }
            else if (num>=1){
                printf ("I\n");
                num -= 1;
            }
        }
        printf("\n");
    }
    return 0;
}

遇到的问题

  • 原始代码中每个罗马数字片段(如M、CM)的输出都带换行符,导致罗马数字每个字符/组合单独占一行,不符合单行输出的要求。
  • 直接移除所有printf里的\n后,罗马数字能连成一行,但输入的数字会和输出内容紧挨着,无法正常换行输入。

解决办法

把while循环内所有printf语句中的\n全部移除,只保留while循环结束后的printf("\n")。修改后的核心逻辑示例:

while (num != 0){
    if (num>=1000){
        printf("M");
        num -= 1000;
    }
    else if (num>=900){
        printf("CM");
        num -= 900;
    }
    // 其余else if分支同理,均移除printf内的换行符
    ...
}
printf("\n");

修改后,每个输入整数对应的罗马数字会完整输出在一行,同时输入过程也能正常换行,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:35:19