iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0
自我挑戰組

Codewar 進進出出 JS/Ruby系列 第 26

打開數字

題目:
(6 級) Write Number in Expanded Form
系統會給你一個數字,你需要回傳一個字串,是以展開的形式表示該數字。

範例:

expanded_form(12)    => "10 + 2"
expanded_form(42)    => "40 + 2"
expanded_form(70304) => "70000 + 300 + 4"

注意:
所有的數字皆會是大於 0 的正整數


Ruby 解法:

def expanded_form(num)
  # 把數字轉成字串再把每個 digit 拆成陣列之後反轉
  num.to_s.split("").reverse
     # 把每個 digit 挑出來
     .map.with_index { |digit, index|
       # 乘數為 1 加上 index 個 0 的數字
       mul = "1#{"0" * index}".to_i
       # digit 乘上乘數後就是展開後的形式
       digit.to_i * mul }
     # 再把數字反轉回來,並去除掉只有 0 的數字
     .reverse.delete_if { |i| i == 0 }
     # 最後用 + 號把每個數字串成字串
     .join(" + ")
end

JavaScript 解法:

function expandedForm(num) {
  // 先用一個變數把計算結果存起來
  let result =
    // 把數字轉成字串再把每個 digit 拆成陣列之後反轉
    num.toString().split("").reverse()
       // 把每個 digit 挑出來
       .map((digit, index) => {
         // 乘數為 1 加上 index 個 0 的數字
         let mul = `1${"0".repeat(index)}`;
         // digit 乘上乘數後就是展開後的形式
         return parseInt(mul) * digit;})
       // 再把數字反轉回來,並去除掉只有 0 的數字
       .reverse().filter(n => n !== 0)
       // 最後用 + 號把每個數字串成字串
       .join(" + ");
  
  // 最後回傳結果
  return result;
}

上一篇
你是幾號?
下一篇
我是新來的
系列文
Codewar 進進出出 JS/Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言