作者pplle (魚)
看板Web_Design
標題[問題] Roman Numeral Converter
時間Wed May 24 00:00:56 2017
之前在練習freeCodeCamp上的題目遇到問題,想請問大家。
po錯版麻煩請告知。
freeCodeCamp的題目是數字轉羅馬字。
我的程式如下:
var symbolCount = 0;
var rNum = 0;
var romanNStr = ""; //組出的羅馬數字
function convertToRoman(num) {
rNum= num;
//先算開頭M的個數
symbolCount = Math.floor(rNum/1000);
rNum = rNum -(1000*symbolCount);
for(var i = 0; i < symbolCount; i++ ){
romanNStr+="M";
}
calSymbol("M", "D", "C", 100);
calSymbol("C", "L", "X", 10);
calSymbol("X", "V", "I", 1);
return romanNStr;
}
//以三個為一組計算
function calSymbol(b, m, s, val){
symbolCount = Math.floor(rNum / val);
if(symbolCount == 9){
romanNStr += s + b;
rNum -= (9*val);
symbolCount = 0;
}
if(symbolCount == 4){
romanNStr += s + m;
rNum -= (4*val);
symbolCount = 0;
}
if(symbolCount >= 5){
romanNStr += m;
rNum -= (5 * val);
symbolCount -= 5;
}
for(var i = 0; i < symbolCount ; i++){
romanNStr += s;
rNum -= (1 * val);
}
}
================================
我知道我的程式不是最佳解,
但執行freeCodeCamp提供的[Run tests]按鈕,僅有converToRoman(2)過關。
我自己也找不到問題,
麻煩高手跟我說我的程式哪裡有問題,謝謝
freeCodeCamp的test如下
convertToRoman(2) should return "II".
convertToRoman(3) should return "III".
convertToRoman(4) should return "IV".
convertToRoman(5) should return "V".
convertToRoman(9) should return "IX".
convertToRoman(12) should return "XII".
convertToRoman(16) should return "XVI".
convertToRoman(29) should return "XXIX".
convertToRoman(44) should return "XLIV".
convertToRoman(45) should return "XLV"
convertToRoman(68) should return "LXVIII"
convertToRoman(83) should return "LXXXIII"
convertToRoman(97) should return "XCVII"
convertToRoman(99) should return "XCIX"
convertToRoman(500) should return "D"
convertToRoman(501) should return "DI"
convertToRoman(649) should return "DCXLIX"
convertToRoman(798) should return "DCCXCVIII"
convertToRoman(891) should return "DCCCXCI"
convertToRoman(1000) should return "M"
convertToRoman(1004) should return "MIV"
convertToRoman(1006) should return "MVI"
convertToRoman(1023) should return "MXXIII"
convertToRoman(2014) should return "MMXIV"
convertToRoman(3999) should return "MMMCMXCIX"
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.104.32.17
※ 文章網址: https://www.ptt.cc/bbs/Web_Design/M.1495555259.A.613.html
※ 編輯: pplle (112.104.32.17), 05/24/2017 00:02:33
→ pplle: 很抱歉,還是看不出來…程式碼我看過N次了Orz... 05/24 20:49
→ EPGo: 檢查console發現呼叫多次會因為 romanNStr 沒有清空導致 05/24 21:59
→ EPGo: return出來的答案錯誤 EX: convertToRoman(2) = II 05/24 22:00
→ EPGo: 再 convertToRoman(3) 卻變成 IIIII 05/24 22:01
→ EPGo: 我直覺想法是再多一個變數來儲存輸出的值,求出答案將答案給 05/24 22:03
→ EPGo: 該變數,並且清空 romanNStr 以便下次計算 05/24 22:04
→ pplle: 太感謝E大了,有恍然大悟的感覺,晚上就來改我的程式,謝謝 05/25 16:53