第13题:整数转换成罗马数字
2015-01-19 13:16
369 查看
给定一个整数num,( 1<=num<=3999),将整数转换成罗马数字。
如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等。
格式:
第一行输入一个整数,接下来输出对应的罗马数字。
样例输入:
123
样例输出:
CXXIII
遇到这道题的时候,不了解罗马数字的规则的话,还真不知道怎么写。没什么好说的,度娘。。
研究了一下,知道这一题的本意是让我们将整数的每一位都拆开,分别用罗马数字替换,当然得符合规则。。
我写了一份对应表:
这样这一题就只要对应替换就行了,代码如下:
#include<stdio.h>
#include<string.h>
int main(void) {
intnum;
intx, i, len;
charres[16];
chara[5], b[5], c[5], d[5];
scanf("%d",&num);
if(num < 1 || num > 3999) {
return0;
}
//个位
x= num % 10;
switch(x) {
case0 : a[0] = '\0'; break;
case1 : a[0] = 'I'; a[1] = '\0'; break;
case2 : a[0] = 'I'; a[1] = 'I'; a[2] = '\0'; break;
case3 : a[0] = 'I'; a[1] = 'I'; a[2] = 'I'; a[3] = '\0'; break;
case4 : a[0] = 'I'; a[1] = 'V'; a[2] = '\0'; break;
case5 : a[0] = 'V'; a[1] = '\0'; break;
case6 : a[0] = 'V'; a[1] = 'I'; a[2] = '\0'; break;
case7 : a[0] = 'V'; a[1] = 'I'; a[2] = 'I'; a[3] = '\0'; break;
case8 : a[0] = 'V'; a[1] = 'I'; a[2] = 'I'; a[3] = 'I'; a[4] = '\0'; break;
case9 : a[0] = 'I'; a[1] = 'X'; a[2] = '\0'; break;
}
//十位
x= ( num / 10 ) % 10;
switch(x) {
case0 : b[0] = '\0'; break;
case1 : b[0] = 'X'; b[1] = '\0'; break;
case2 : b[0] = 'X'; b[1] = 'X'; b[2] = '\0'; break;
case3 : b[0] = 'X'; b[1] = 'X'; b[2] = 'X'; b[3] = '\0'; break;
case4 : b[0] = 'X'; b[1] = 'L'; b[2] = '\0'; break;
case5 : b[0] = 'L'; b[1] = '\0'; break;
case6 : b[0] = 'L'; b[1] = 'X'; b[2] = '\0'; break;
case7 : b[0] = 'L'; b[1] = 'X'; b[2] = 'X'; b[3] = '\0'; break;
case8 : b[0] = 'L'; b[1] = 'X'; b[2] = 'X'; b[3] = 'X'; b[4] = '\0'; break;
case9 : b[0] = 'X'; b[1] = 'C'; b[2] = '\0'; break;
}
//百位
x= ( num / 100 ) % 10;
switch(x) {
case0 : c[0] = '\0'; break;
case1 : c[0] = 'C'; c[1] = '\0'; break;
case2 : c[0] = 'C'; c[1] = 'C'; c[2] = '\0'; break;
case3 : c[0] = 'C'; c[1] = 'C'; c[2] = 'C'; c[3] = '\0'; break;
case4 : c[0] = 'C'; c[1] = 'D'; c[2] = '\0'; break;
case5 : c[0] = 'D'; c[1] = '\0'; break;
case6 : c[0] = 'D'; c[1] = 'C'; c[2] = '\0'; break;
case7 : c[0] = 'D'; c[1] = 'C'; c[2] = 'C'; c[3] = '\0'; break;
case8 : c[0] = 'D'; c[1] = 'C'; c[2] = 'C'; c[3] = 'C'; c[4] = '\0'; break;
case9 : c[0] = 'C'; c[1] = 'M'; c[2] = '\0'; break;
}
//千位
x= ( num / 1000 ) % 10;
switch(x) {
case0 : d[0] = '\0'; break;
case1 : d[0] = 'M'; d[1] = '\0'; break;
case2 : d[0] = 'M'; d[1] = 'M'; d[2] = '\0'; break;
case3 : d[0] = 'M'; d[1] = 'M'; d[2] = 'M'; d[3] = '\0'; break;
}
i= 0;
len= 0;
while(d[i] != '\0') {
res[len]= d[i];
i++;
len++;
}
i= 0;
while(c[i] != '\0') {
res[len]= c[i];
i++;
len++;
}
i= 0;
while(b[i] != '\0') {
res[len]= b[i];
i++;
len++;
}
i= 0;
while(a[i] != '\0') {
res[len]= a[i];
i++;
len++;
}
res[len]= '\0';
printf("%s",res);
return0;
}
如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等。
格式:
第一行输入一个整数,接下来输出对应的罗马数字。
样例输入:
123
样例输出:
CXXIII
遇到这道题的时候,不了解罗马数字的规则的话,还真不知道怎么写。没什么好说的,度娘。。
研究了一下,知道这一题的本意是让我们将整数的每一位都拆开,分别用罗马数字替换,当然得符合规则。。
我写了一份对应表:
这样这一题就只要对应替换就行了,代码如下:
#include<stdio.h>
#include<string.h>
int main(void) {
intnum;
intx, i, len;
charres[16];
chara[5], b[5], c[5], d[5];
scanf("%d",&num);
if(num < 1 || num > 3999) {
return0;
}
//个位
x= num % 10;
switch(x) {
case0 : a[0] = '\0'; break;
case1 : a[0] = 'I'; a[1] = '\0'; break;
case2 : a[0] = 'I'; a[1] = 'I'; a[2] = '\0'; break;
case3 : a[0] = 'I'; a[1] = 'I'; a[2] = 'I'; a[3] = '\0'; break;
case4 : a[0] = 'I'; a[1] = 'V'; a[2] = '\0'; break;
case5 : a[0] = 'V'; a[1] = '\0'; break;
case6 : a[0] = 'V'; a[1] = 'I'; a[2] = '\0'; break;
case7 : a[0] = 'V'; a[1] = 'I'; a[2] = 'I'; a[3] = '\0'; break;
case8 : a[0] = 'V'; a[1] = 'I'; a[2] = 'I'; a[3] = 'I'; a[4] = '\0'; break;
case9 : a[0] = 'I'; a[1] = 'X'; a[2] = '\0'; break;
}
//十位
x= ( num / 10 ) % 10;
switch(x) {
case0 : b[0] = '\0'; break;
case1 : b[0] = 'X'; b[1] = '\0'; break;
case2 : b[0] = 'X'; b[1] = 'X'; b[2] = '\0'; break;
case3 : b[0] = 'X'; b[1] = 'X'; b[2] = 'X'; b[3] = '\0'; break;
case4 : b[0] = 'X'; b[1] = 'L'; b[2] = '\0'; break;
case5 : b[0] = 'L'; b[1] = '\0'; break;
case6 : b[0] = 'L'; b[1] = 'X'; b[2] = '\0'; break;
case7 : b[0] = 'L'; b[1] = 'X'; b[2] = 'X'; b[3] = '\0'; break;
case8 : b[0] = 'L'; b[1] = 'X'; b[2] = 'X'; b[3] = 'X'; b[4] = '\0'; break;
case9 : b[0] = 'X'; b[1] = 'C'; b[2] = '\0'; break;
}
//百位
x= ( num / 100 ) % 10;
switch(x) {
case0 : c[0] = '\0'; break;
case1 : c[0] = 'C'; c[1] = '\0'; break;
case2 : c[0] = 'C'; c[1] = 'C'; c[2] = '\0'; break;
case3 : c[0] = 'C'; c[1] = 'C'; c[2] = 'C'; c[3] = '\0'; break;
case4 : c[0] = 'C'; c[1] = 'D'; c[2] = '\0'; break;
case5 : c[0] = 'D'; c[1] = '\0'; break;
case6 : c[0] = 'D'; c[1] = 'C'; c[2] = '\0'; break;
case7 : c[0] = 'D'; c[1] = 'C'; c[2] = 'C'; c[3] = '\0'; break;
case8 : c[0] = 'D'; c[1] = 'C'; c[2] = 'C'; c[3] = 'C'; c[4] = '\0'; break;
case9 : c[0] = 'C'; c[1] = 'M'; c[2] = '\0'; break;
}
//千位
x= ( num / 1000 ) % 10;
switch(x) {
case0 : d[0] = '\0'; break;
case1 : d[0] = 'M'; d[1] = '\0'; break;
case2 : d[0] = 'M'; d[1] = 'M'; d[2] = '\0'; break;
case3 : d[0] = 'M'; d[1] = 'M'; d[2] = 'M'; d[3] = '\0'; break;
}
i= 0;
len= 0;
while(d[i] != '\0') {
res[len]= d[i];
i++;
len++;
}
i= 0;
while(c[i] != '\0') {
res[len]= c[i];
i++;
len++;
}
i= 0;
while(b[i] != '\0') {
res[len]= b[i];
i++;
len++;
}
i= 0;
while(a[i] != '\0') {
res[len]= a[i];
i++;
len++;
}
res[len]= '\0';
printf("%s",res);
return0;
}
相关文章推荐
- c++ 计蒜客第13题整数转换为罗马数字
- 计蒜客 第13题:整数转换成罗马数字
- 计蒜客 挑战难题 第13题:整数转换成罗马数字
- 计蒜客整数转换成罗马数字
- 计蒜客————整数转换成罗马数字
- 罗马数字转换成整数(注意罗马数字的大小表示问题)
- 罗马数字转换成整数
- 罗马数字转换成整数
- 计蒜课:整数转换成罗马数字
- [C++]LeetCode 12: Integer to Roman(将整数转换为罗马数字)
- 计蒜客——罗马数字转换成整数
- 整数转换成罗马数字
- leetcode 罗马数字与整数的转换算法
- LeetCode习题笔记——罗马数字和整数之间的转换
- 罗马数字转换成整数
- leetcode-12. Integer to Roman(整数转换成罗马数字)
- 计蒜客挑战难题:整数转换成罗马数字
- 整数转换成罗马数字和罗马数字转换成整数
- 简单的算法问题6——罗马数字转换成整数
- 整数转换成罗马数字