我是靠谱客的博主 聪慧翅膀,最近开发中收集的这篇文章主要介绍xdoj1256(2017新生赛现场赛E题),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目链接: http://acm.xidian.edu.cn/problem.php?id=1256

1256: Roman Numbers

时间限制: 1 Sec   内存限制: 128 MB
提交: 18   解决: 12
[ 提交][ 状态][ 讨论版]

题目描述

把小于 4000 的正整数转换成相应的罗马数字。

罗马数字共有7个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。按照下述的规则可以表示任意小于4000的正整数。

    重复数次:一个罗马数字重复几次,就表示这个数的几倍。

    右加左减:
        在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
        在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
        左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV
        但是,左减时不可跨越一个位值。比如,99不可以用IC(100-1)表示,而是用XCIX([100-10]+[10-1])表示。(等同于阿拉伯数字每位数字分别表示。)
        左减数字必须为一位,比如8写成VIII,而非IIX。
        右加数字不可连续超过三位,比如14写成XIV,而非XIIII。(见下方“数码限制”一项。)

    数码限制:
        同一数码最多只能连续出现三次,如40不可表示为XXXX,而要表示为XL。

输入

多组数据,每组数据一行,一个小于4000的正整数。

输出

对于每组数据,输出一行,相应的罗马数字。

样例输入

3
6
14
199
1437

样例输出

III
VI
XIV
CXCIX
MCDXXXVII

思路:当时做这道题时看到一大堆的规则直接蒙圈。最后看了一下答案,打表来做 尴尬(其实我还是不太明白那些规则~)
上代码:


#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char gewei[9][5]={"I","II","III","IV","V","VI","VII","VIII","IX"};
char shiwei[9][5]={"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char baiwei[9][5]={"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char qianwei[3][5]={"M","MM","MMM"};
int qian,bai,shi,ge,a;
while(scanf("%d",&a) != EOF)
{
qian=a/1000;
bai=(a%1000)/100;
shi=(a%100)/10;
ge=a%10;
if(qian>=1&&qian<=9)
printf("%s",qianwei[qian-1]);
if(bai>=1&&bai<=9)
printf("%s",baiwei[bai-1]);
if(shi>=1&&shi<=9)
printf("%s",shiwei[shi-1]);
if(ge>=1&&ge<=9)
printf("%s",gewei[ge-1]);
printf("n");
}
return 0;
}

最后

以上就是聪慧翅膀为你收集整理的xdoj1256(2017新生赛现场赛E题)的全部内容,希望文章能够帮你解决xdoj1256(2017新生赛现场赛E题)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部