[問題] Roman Numeral Converter

看板Web_Design作者 (魚)時間8年前 (2017/05/24 00:00), 8年前編輯推噓1(108)
留言9則, 2人參與, 最新討論串1/1
之前在練習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

05/24 10:08, , 1F
https://jsfiddle.net/n3xa17ox/ 這樣子看的出來問題在哪~
05/24 10:08, 1F

05/24 20:49, , 2F
很抱歉,還是看不出來…程式碼我看過N次了Orz...
05/24 20:49, 2F

05/24 21:59, , 3F
檢查console發現呼叫多次會因為 romanNStr 沒有清空導致
05/24 21:59, 3F

05/24 22:00, , 4F
return出來的答案錯誤 EX: convertToRoman(2) = II
05/24 22:00, 4F

05/24 22:01, , 5F
再 convertToRoman(3) 卻變成 IIIII
05/24 22:01, 5F

05/24 22:03, , 6F
我直覺想法是再多一個變數來儲存輸出的值,求出答案將答案給
05/24 22:03, 6F

05/24 22:04, , 7F
該變數,並且清空 romanNStr 以便下次計算
05/24 22:04, 7F

05/24 22:04, , 8F
https://jsfiddle.net/n3xa17ox/2/ 可以參考看看 : )
05/24 22:04, 8F

05/25 16:53, , 9F
太感謝E大了,有恍然大悟的感覺,晚上就來改我的程式,謝謝
05/25 16:53, 9F
文章代碼(AID): #1P95oxOJ (Web_Design)
文章代碼(AID): #1P95oxOJ (Web_Design)