整数转罗马数字:如何实现罗马数字单行输出且输入可换行?(已解决)
整数转罗马数字的输出格式问题解决
我有一项作业要求实现整数转罗马数字,最初写的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
相关产品推荐
相关产品推荐

