计算美女主播直播间密码

题目-破解直播间密码

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

数学知识

罗马数字的计数方法

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

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

知识共享署名4.0国际许可协议,转载请保留出处; 部分内容来自网络,若有侵权请联系我:前端学堂 » 计算美女主播直播间密码

赞 (4) 打赏

评论 0

如果对您有帮助,别忘了打赏一下宝宝哦!

支付宝扫一扫打赏

微信扫一扫打赏