A:罗马数字

字符串处理,没有什么特别的,本机不会测试文件输入输出流……难过

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int w[26];

void init()
{
	memset(w, 0, sizeof(int)*26);
	w['I'-'A']=1;
	w['V'-'A']=5;
	w['X'-'A']=10;
	w['L'-'A']=50;
	w['C'-'A']=100;
	w['D'-'A']=500;
	w['M'-'A']=1000;
}

int toint(string s)
{
	int i, n=0, tmp;
	for(i=0; i<s.length(); i++)
	{
		tmp = w[s[i]-'A'];
		if(i+1 < s.length() && w[s[i+1]-'A']>tmp)
		{
			tmp=w[s[i+1]-'A']-tmp;
			i++;
		}
		n+=tmp;
	}
	return n;
}

string toiii(int n)
{
	string s= "";
	char *iii="MDCLXVI";
	int i,unit=1000;

	while(n>=unit)
	{
		s+='M';
		n-=unit;
	}

	for(i=0, unit /=10; unit>0; unit /=10, i+=2)
	{
		if(i>=9*unit)
		{
			s+=iii[i+2];
			s+=iii[i];
			n-=9*unit;
		}
		else
		{
				if(n>=5*unit)
				{
					s+=iii[i+1];
					n-=5*unit;
				}
				else if(n>=4*unit)
				{
					s+=iii[i+2];
					s+=iii[i+1];
					n-=4*unit;
				}

				while(n>=unit)
				{
					s+=iii[i+2];
					n-=unit;
				}

		}
	}
	return s;
}

int main()
{
	//ifstream cin("roma.in");
	//ofstream cout("estdout.pc2");

	init();
	int n,num=0;

	while(cin >> n)
	{
		if(n==0) break;
		int s=0;
		string t;
		for(int i=0; i<n; i++)
		{
				cin >> t;
				s+=toint(t);
		}
		t=toiii(s);
		cout << t << endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值