[問題] Roman Numeral Converter

作者: pplle (魚)   2017-05-24 00:00:56
之前在練習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"
作者: EPGo   2017-05-24 10:08:00
https://jsfiddle.net/n3xa17ox/ 這樣子看的出來問題在哪~
作者: pplle (魚)   2017-05-24 20:49:00
很抱歉,還是看不出來…程式碼我看過N次了Orz...
作者: EPGo   2017-05-24 21:59:00
檢查console發現呼叫多次會因為 romanNStr 沒有清空導致return出來的答案錯誤 EX: convertToRoman(2) = II再 convertToRoman(3) 卻變成 IIIII我直覺想法是再多一個變數來儲存輸出的值,求出答案將答案給該變數,並且清空 romanNStr 以便下次計算https://jsfiddle.net/n3xa17ox/2/ 可以參考看看 : )
作者: pplle (魚)   2017-05-25 16:53:00
太感謝E大了,有恍然大悟的感覺,晚上就來改我的程式,謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com