【C++】將羅馬數字轉換成阿拉伯數字
題目:Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
將羅馬數字轉換成阿拉伯數字。
方法一:
從前往後的計算,規則如下:1,小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數
2,小的數字(限於 Ⅰ、X 和 C)在大的數字的左邊,所表示的數等於大數減小數得到的數
程式碼如下:
int romanToInt(string s) {
map<char,int> saluota{{'I' ,1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}};
int length = s.length();
if(length==1)
return saluota[s[0]];
int i=0,temp,sum=0;
while(i<length){
if(saluota[s[i]] < saluota[s[i+1]] ){
temp=saluota[s[i+1]]-saluota[s[i]];
i+=2;
}
else {
temp=saluota[s[i]];
i++;
}
sum+=temp;
if(i+2>=length)
break;
}
if(saluota[s[i]] < saluota[s[i+1]]){
sum+=saluota[s[i+1]]-saluota[s[i]];
}
else
sum+=saluota[s[i+1]]+saluota[s[i]];
return sum;
}
弊端:實現比較複雜,而且有當x=”IX”的時候,在CodeBlocks下面輸出是9,但是在LeedCode下面輸出是109,很奇怪。
方法二:從後往前計算,若是後一個比前一個小,那麼就sum直接加上,若是後一個比前一個小,那麼大數減小數之後在sum加上。
程式碼如下:
int romanToInt2(string s) {
map<char,int> saluota{{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}};
int length=s.length();
if(length==1)
return saluota[s[0]];
int i=0,sum=saluota[s[length-1]];
for(i=length-2;i>=0;i--){
if(saluota[s[i]]>=saluota[s[i+1]])
sum+=saluota[s[i]];
else
sum-=saluota[s[i]];
}
return sum;
}
Leetcode上通過了。
優點點是很程式碼簡潔,也比較容易計算。但是缺點是不容易想到。不知道如何復現,可能下次同類型的題目還是不知道用這種方法。
相關推薦
【C++】將羅馬數字轉換成阿拉伯數字
題目:Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 將羅馬數字轉換成阿拉伯數字。 方法
將羅馬數字轉換成阿拉伯數字
// 1. 可以同時處理最簡和非最簡的羅馬數字 // 2. 不處理加橫線擴大1000倍的情況,也就是最大隻處理"M" // 3. 不作合法性檢查,如"L"不能出現在"C"前面 int Digit(char c) { if (c == 'I') {
將漢字數字字符串轉換成阿拉伯數字
weight class har spa 數字 null 轉換 bold blog 1 declare 2 3 str_mid varchar2(100); 4 str_end varchar2(100); 5 begin 6 7 for j in
【sql】將 float 轉換為資料型別 numeric 時出現算術溢位錯誤
sql中float型別的取值範圍? 大於9999999999的情況下,就會報錯將 float 轉換為資料型別 numeric 時出現算術溢位錯誤 insert into[dbo].[T_DATA_DISEASE](STATIONCODE,MONIDATE,RATE,STYL
【轉】將HTML5封裝成android應用APK 檔案若干方法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
c#:無法將 NULL 轉換成“System.DateTime”,因為它是一種值型別
摘自:http://www.blogjava.net/parable-myth/archive/2010/09/30/333454.html 在C# 2.0裡面的資料型別中,分為值型別和引用型別,引用型別可以初始化為null,可是值型別是不可以的。 比如經常用到的System.Guid型別,要麼賦值為Gu
給定一個羅馬數字 ss,將羅馬數字轉換成整數。
給定一個羅馬數字 s,將羅馬數字轉換成整數。 如羅馬數字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。 在構成數字的時
【C#】之里氏轉換
前面說到了繼承,子類可以繼承父類的屬性和方法,但是父類也有自己特有的子類不能用的屬性和方法,當子類想要呼叫父類中的一些特有的屬性或方法是,就用到了里氏轉換,即將子類通過轉換變成父類,使用父類中的特有屬性和方法後在返回為子類。 #一、里氏轉換可能出現的四種情況 ##1、 //如果n
【演算法】把字串轉換成整數,樹中兩個結點的最低公共祖先
本書最後的兩道題,作者拿了兩個面試案例來呈現,主要是要弄清面試官的意圖、考慮周全,有些演算法雖然容易,不要輕易下手。在此之上最好寫出具有魯棒性的和好的擴充套件性的程式碼,遵循編碼規範。 面試題67:把字串轉換成整數 請你寫一個函式StrToInt,實現把字串轉
【C#】三種轉換字元法、三元表示式、常量列舉結構和陣列
一、三種方法轉換字串變成數字 1.1.Parse的使用 這兩個使用結果一樣,當用戶輸入的數字轉換成我們想要的數字型別。 可以使用 Convert.ToInt32(""); 還可以使用 int.Parse("") 1.2.int.TryParse的使用
C#_將時間轉換成字串的幾種方法
//獲取當前系統時間 DateTime dt = System.DateTime.Now; //將系統時間轉換成字串 string strTime
【C++】將結構作為引數傳遞並返回
#include"iostream.h" #include"stdio.h" #include"string.h" struct Date { int day,month,year; }; Dat
C語言將字串轉換成對應的數字(十進位制、十六進位制)
問題1:講一個十進位制數字的字串表示轉換成對應的整數。舉例:將“1234”轉換成整數1234./*將字串s轉換成相應的整數*/ int atoi(char s[]) { int i = 0; int n = 0; for (i =
將字串中的中文數字轉換成阿拉伯數字
1、正則表示式的處理工具類 public class RexUtils { public static String and(String... rules) { St
【Android】將圖片轉換為圓角
摘自:https://github.com/NashLegend/SourceWall.git import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.
LeetCode試題--將羅馬數字轉換成整數
題目描述如下: 通過分析題目邏輯,羅馬數字使用Map儲存,呼叫String的CharAt方法提取字串中的特定位置字元。 map.get(Object key):獲取給定key對應的值; char CharAt(int index):取字串中存放在index位置的
【C++】將txt檔案中的內容讀入動態二維陣列內
這篇主要記錄一下使用C++中的動態二維陣列來儲存讀入的txt文件中的資料 //設txt中的資料有rows行和cols列 //使用new新建一個rows行,cols列的二維陣列fstream fin
【實用】把jar轉換成exe檔案
上課後寫部落格的時間就少了,趁著清明假期把之前學到的一些東西整理一下~之前由於專案需要爬取很大的資料量,在機房用了多臺電腦去爬取資料,但是很麻煩的一點就是得“搬”程式碼還要進行相應的配置,後來瞭解到jar轉exe的做法感覺很便利~接下來就和大家分享一下>_
羅馬數字轉換為阿拉伯數字
這篇帖子我提供了一個將幾千以內的羅馬數字,轉換成阿拉伯數字的JS方法。 對於這種轉化,我認為只要注意羅馬數字的兩個特性: 1.連寫的數字重複不得超過三次,比方說要表示4,就不能是IIII,而應該是IV 2.如果小的數字,它在大的數字的左邊,那麼它所表示的數等於大數減小數得到
將字串轉換成十進位制數字
這兩天做的一個專案需要將十進位制字串(只含'0'--'9' )轉換成相應的數字。比如將“123456789”轉換成數字123456789。要求只轉換指定長度而不是轉換到字串的結束‘\0’。在網上搜到了比如StrToInt()等都是處理字串到字串結束而且不知