码迷,mamicode.com
首页 > 其他好文 > 详细

第13题:整数转换成罗马数字&第14题:罗马数字转换成整数

时间:2014-09-29 01:29:37      阅读:403      评论:0      收藏:0      [点我收藏+]

标签:c   算法   罗马数字转换   

写在前面:

这两道题合起来写吧,其实整数转罗马数字我前天就写完了,当我想写罗马数转整数的时候竟然脑子一片空白,想了几分钟就想起来Map,本着学习的目的最终还是不想用Map,坚持C语言,今天脑子里直接涌出了Switch方式转换,看来“蹲在马桶上编程”的方式还是蛮不错的o(^▽^)o

整数转罗马数字:主要建立对应关系,输出时有点像百钱百鸡

罗马数字转整数:输入罗马数字(其实就是字符数组)后,for循环遍历,找出对应,这个再看不懂的建议去看看罗马数字表示方法。

第13题:整数转换成罗马数字


给定一个整数num,( 1<=num<=3999),将整数转换成罗马数字。

如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等。

格式:

   第一行输入一个整数,接下来输出对应的罗马数字。

提示:

   罗马数字的常识见此链接,对做题有帮助哦~尤其是表示方法。

http://baike.baidu.com/link?url=injU8M4bAoc2zRZQ1GtgrfvuzCJO9PLnq6fpQGJLenakbzo-rS8p-qsYHR_81-aN


样例输入

123

样例输出

CXXIII

解析:
#include <stdio.h>

int main()

{
	int num;
	char* digit[10] = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
	char* ten[10] = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
	char* hundreds[10] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
	char* thousand[4] = {"","M","MM","MMM"};
	
	scanf("%d",&num);
	printf("%s",thousand[num/1000]);
	printf("%s",hundreds[num%1000/100]);
	printf("%s",ten[num%100/10]);
	printf("%s",digit[num%10]);
}

第14题:罗马数字转换成整数


给定一个罗马数字s,( I<=s<=MMMCMXCIX)(即1到3999),将罗马数字转换成整数。

如罗马数字I,II,III,IV,V分别代表数字1, 2, 3, 4, 5。

格式:

   第一行输入一个罗马数字,接下来输出对应的整数。

提示:

   首先要来了解一下罗马数字表示法,基本字符有7个:I,V,X,L,C,D,M,分别表示1,5,10,50,100,500,1000。

在构成数字的时候,有下列规则:

1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;

2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;

3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

4、正常使用时,连写的数字重复不得超过三次。

样例输入

CXXIII

样例输出

123

解析:
#include <stdio.h>
#include <string.h> 

int main()

{
	char lm[10000];
	int i,count = 0;
	gets(lm);
	for(i = 0;i < strlen(lm);i++)
	{
		switch(lm[i])
		{
			case 'M': count += 1000; break;
			case 'D': count += 500; break;
			case 'C': 
				if(lm[i+1] == 'D' || lm[i+1] == 'M')
					count -= 100;
				else
					count += 100;
				break;
			case 'L': count += 50; break;
			case 'X':
				if(lm[i+1] == 'L' || lm[i+1] == 'C')
					count -= 10;
				else
					count += 10;
				break;
			case 'V': count += 5; break;
			case 'I':
				if(lm[i+1] == 'V')
					count--;
				else
					count++;
				break;
		}
	}
	printf("%d\n",count);
	return 0;
} 

如果看不懂欢迎留言提问或者留下邮箱!!!o(∩_∩)o 

(需要邀请码的请留言)


第13题:整数转换成罗马数字&第14题:罗马数字转换成整数

标签:c   算法   罗马数字转换   

原文地址:http://blog.csdn.net/cnshsh/article/details/39647903

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!