计算美女主播直播间密码

题目-破解直播间密码

美女主播的直播间密码是一串罗马数字,对应的阿拉伯数字是1414,转换成罗马数字就可以进去了。我们写个代码算一下对应的罗马数字,万一哪天美女美眉换了数字,我们能及时算出来。呵呵😑

数学知识

罗马数字的计数方法
  <th>
    I
  </th>
  
  <th>
    V
  </th>
  
  <th>
    X
  </th>
  
  <th>
    L
  </th>
  
  <th>
    C
  </th>
  
  <th>
    D
  </th>
  
  <th>
    M
  </th>
</tr>

<tr>
  <td>
    阿拉伯数字表示
  </td>
  
  <td>
    1
  </td>
  
  <td>
    5
  </td>
  
  <td>
    10
  </td>
  
  <td>
    50
  </td>
  
  <td>
    100
  </td>
  
  <td>
    500
  </td>
  
  <td>
    1000
  </td>
</tr>
基本字符
      相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
    
    
      小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
    
    
      小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
    
    
      正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外);
    
    
      在一个数的上面画一条横线,表示这个数扩大1000倍。
    

分析

元芳,来帮帮哥!怎么把阿拉伯数字转换成罗马数字呢?一个一个的加,来匹配么?

其实美眉主播出的题目具有迷惑性,所谓的罗马数字表示法可以类比下我们十进制的表示法,比如 123,就是1*100 + 2*10 + 3*1,就是包含1个100,3个10 ,1个1。我们把罗马数字的基数都表示出来,然后从大到小依次来找就好了。

Just Try

请你自动动手试一下:在线编程环境

想想有没有其他思路?

想想时间和空间复杂度,能否优化一下

真的做不到么?

let you think, think makes you happy!

参考答案

const RomanMap={
  1000: "M",
  900: "CM",
  500: "D",
  400: "CD",
  100: "C",
  90: "XC",
  50: "L",
  40: "XL",
  10: "X",
  9: "IX",
  5: "V",
  4: "IV",
  1: "I"
}
function algorithm(n){
  let baseKey = Object.keys(RomanMap)
  let roman = [], cnt = 0;
  baseKey.reverse().forEach(k=>{
    cnt = n/k;
    n = n%k;
    for(;cnt>0;cnt--){
      roman.push(RomanMap[k])
    }
  }
                           )
  return roman.join("-")
}
function main(...param) {
  console.show("参数:" + param, "结果:" + algorithm(param))
  testPerformance(algorithm, param)
}
main(1414);

所以结果是:M-CD-X-IV

请你自动动手试一下:在线编程环境



请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部