今天的算法題難度級別'Easy',不得不說'easy'就是比'medium'簡單啊杉允,哈哈膳犹。。冕香。
上周做的題目是int轉(zhuǎn)羅馬數(shù)字蛹尝,這周當然就是羅馬數(shù)字轉(zhuǎn)int數(shù)字啦,范圍依舊是1~3999悉尾,比較簡單突那,說下思路就直接上代碼。
思路:一個字符一個字符的遍歷构眯,如果當前的數(shù)字大于下一個數(shù)字愕难,就減去當前的數(shù)字,否則就是加上當前的數(shù)字。
實現(xiàn)代碼:
//將單個字符轉(zhuǎn)成int數(shù)字(C語言里沒有字典,只好這么麻煩了)
int wordToInt(char s) {
switch (s) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
//將羅馬數(shù)字轉(zhuǎn)為int
int romanToInt(char* s) {
int sum = 0;
for (int i = 0; i < strlen(s); i++) {
//如果當前的數(shù)字小于下一個數(shù)字(注意數(shù)組越界的問題)
if (wordToInt(s[i]) < wordToInt(s[i + 1]) && i < strlen(s) - 1) {
//減去當前數(shù)字
sum -= wordToInt(s[i]);
}else sum += wordToInt(s[i]);//否則就加上當前數(shù)字
}
return sum;
}