整数转罗马数字(数组对应字符串)

题目:

在这里插入图片描述

思路:

主要是用数组每一项对应一种情况比傻里傻气地写if,else强多了。

代码:

//简洁
class Solution {
public:
    string intToRoman(int num) {
        int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
        string reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        
        string res;
        for(int i=0; i<13; i++){
            while(num>=values[i]){
                num -= values[i];
                res += reps[i];
            }
        }
        return res;
    }
};

//复杂

class Solution {
public:
    string intToRoman(int num) {
        int remain=num;
		int temp=0;
		int count=0;
		string res="";
		//vector<string> resVec;
		while(remain>0)
		{
			temp=remain;
			if(remain>=1000)
			{
				count=temp/1000;
				remain=remain-count*1000;
				for(int i=0;i<count;i++)
					res += "M";
					//resVec.push_back("M");
				
			}
			else if(remain>=900)
			{
				count=temp/900;
				remain=remain-count*900;
				for(int i=0;i<count;i++)
					res += "CM";
					//resVec.push_back("CM");
				
			}
			else if(remain>=500)
			{
				count=temp/500;
				remain=remain-count*500;
				for(int i=0;i<count;i++)
					res += "D";
					//resVec.push_back("D");
				
			}
			else if(remain>=400)
			{
				count=temp/400;
				remain=remain-count*400;
				for(int i=0;i<count;i++)
					res += "CD";
					//resVec.push_back("CD");
				
			}
			else if(remain>=100)
			{
				count=temp/100;
				remain=remain-count*100;
				for(int i=0;i<count;i++)
					res += "C";
					//resVec.push_back("C");
				
			}
			else if(remain>=90)
			{
				count=temp/90;
				remain=remain-count*90;
				for(int i=0;i<count;i++)
					res += "XC";
					//resVec.push_back("XC");
				
			}
			else if(remain>=50)
			{
				count=temp/50;
				remain=remain-count*50;
				for(int i=0;i<count;i++)
					res += "L";
					//resVec.push_back("L");
				
			}
			else if(remain>=40)
			{
				count=temp/40;
				remain=remain-count*40;
				for(int i=0;i<count;i++)
					res += "XL";
					//resVec.push_back("XL");
				
			}
			else if(remain>=10)
			{
				count=temp/10;
				remain=remain-count*10;
				for(int i=0;i<count;i++)
					res += "X";
					//resVec.push_back("X");
				
			}
			else if(remain>=9)
			{
				count=temp/9;
				remain=remain-count*9;
				for(int i=0;i<count;i++)
					res += "IX";
					//resVec.push_back("IX");
				
			}
			else if(remain>=5)
			{
				count=temp/5;
				remain=remain-count*5;
				for(int i=0;i<count;i++)
					res += "V";
					//resVec.push_back("V");
				
			}
			else if(remain>=4)
			{
				count=temp/4;
				remain=remain-count*4;
				for(int i=0;i<count;i++)
					res += "IV";
					//resVec.push_back("IV");
				
			}
			else if(remain>=1)
			{
				count=temp/1;
				remain=remain-count*1;
				for(int i=0;i<count;i++)
					res += "I";
					//resVec.push_back("I");
				
			}
		}
		/*string res="";
		for(int j=0;j<resVec.size();j++)
		{
			res=res+resVec[j];
		}*/
		return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值