版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處蔬顾。
個(gè)人博客地址:https://yangyuanlin.club
歡迎來踩~~~~
- Roman To Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999. - 題目大意:給定一個(gè)羅馬數(shù)字捂龄,把它轉(zhuǎn)換成一個(gè)整型數(shù)字夕晓。輸入的羅馬數(shù)字保證是在1~3999范圍內(nèi)的妓忍。
- 思路:(對(duì)照 整型數(shù)字轉(zhuǎn)換成羅馬數(shù)字)
首先看羅馬數(shù)字與整型數(shù)字對(duì)照表
羅馬數(shù)字 | 整型數(shù)字 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
羅馬數(shù)字的基本規(guī)則是:
- 相同的數(shù)字連寫唱星、所表示的數(shù)等于這些數(shù)字相加得到的數(shù)、如:Ⅲ=3跌造;
- 小的數(shù)字在大的數(shù)字的右邊杆怕、所表示的數(shù)等于這些數(shù)字相加得到的數(shù)、 如:Ⅷ=8壳贪、Ⅻ=12陵珍;
- 小的數(shù)字、(限于 Ⅰ违施、X 和 C)在大的數(shù)字的左邊互纯、所表示的數(shù)等于大數(shù)減小數(shù)得到的數(shù)、如:Ⅳ=4磕蒲、Ⅸ=9留潦;
- 正常使用時(shí)、連寫的數(shù)字重復(fù)不得超過三次辣往;
- 在一個(gè)數(shù)的上面畫一條橫線兔院、表示這個(gè)數(shù)擴(kuò)大 1000 倍。
按照這個(gè)規(guī)則就是把羅馬數(shù)字的每個(gè)字符翻譯成整型數(shù)字站削,然后按照順序進(jìn)行判斷坊萝,從左到右,當(dāng)后邊一個(gè)大于前邊一個(gè)時(shí)许起,就做減法運(yùn)算十偶,否則就做加法運(yùn)算。
- 代碼:
#include<iostream>
using namespace std;
int romanToInt(string s)
{
int n = s.length();
int res = 0;
int* num = new int[n];
for(int i=0; i<n; i++)
{
switch(s[i])
{
case 'M':
num[i] = 1000;
break;
case 'D':
num[i] = 500;
break;
case 'C':
num[i] = 100;
break;
case 'L':
num[i] = 50;
break;
case 'X':
num[i] = 10;
break;
case 'V':
num[i] = 5;
break;
case 'I':
num[i] = 1;
break;
default:
break;
}
}
for(int i=0; i<n-1; i++)
{
if(num[i] < num[i+1])
res -= num[i];
else
res += num[i];
}
res += num[n-1];
return res;
}
int main()
{
cout<<romanToInt("IV")<<endl;
cout<<romanToInt("VIII")<<endl;
cout<<romanToInt("XLIV")<<endl;
cout<<romanToInt("LXXXVIII")<<endl;
cout<<romanToInt("CDXLIV")<<endl;
cout<<romanToInt("DCCCLXXXVIII")<<endl;
cout<<romanToInt("MMXIV")<<endl;
cout<<romanToInt("MMMXVIII")<<endl;
return 0;
}
-
運(yùn)行結(jié)果:
- 以上园细。
版權(quán)聲明:本文為博主原創(chuàng)文章扯键,轉(zhuǎn)載請(qǐng)注明出處。
個(gè)人博客地址:https://yangyuanlin.club
歡迎來踩~~~~