Roman Numeral Converter


将给定的数字转换成罗马数字。

所有返回的 罗马数字 都应该是大写形式。

Roman Numerals

Array.splice()

Array.indexOf()

Array.join()

思路:

(1)把所给的数字拆分成数组;

(2)将其倒序之后利用索引与元素的关系将其转化为罗马字符(可以不倒序,不过就有些麻烦了);

(3) 再把它倒回来,然后合并,就是原来数字的罗马数字表现。

知识点:

(1)array=string.split('');

split()方法将一个String对象分割成字符串数组,通过将字符串分成子串。

1   var numString = "'" + num + "'";
2   arr = numString.split("");

(2)array.splice(start,deleteCount,item1,item2,...);

splice()方法通过删除现有元素和/或添加新元素来更改一个数组的内容;

1   arr.splice(0, 1);
2   arr.splice(arr.length - 1, 1);

(3)string = array.join("");

join() 方法将数组(或一个类数组对象)的所有元素连接到一个字符串中。

失误点:

这道题困了我三个小时,太特么蛋疼了!

因为一开始通过split方法产生的数组里的数字已经变成了字符型,而我的case 里面的匹配值还都是整形,所以用数字测试没问题,

一上arr[k]就没有结果,后来就都给case里的数字加了引号,大功告成!

 1  function changeRoman(k) {
 2
 3     var I, V, X;
 4     if (k === 0) {
 5       (I = "I"), (V = "V"), (X = "X");
 6     } else if (k === 1) {
 7       (I = "X"), (V = "L"), (X = "C");
 8     } else if (k === 2) {
 9       (I = "C"), (V = "D"), (X = "M");
10     }
11     var roman = "";
12     var idx = arr[k];
13     switch (idx) {
14       case "1":
15         roman = I;
16         break;
17       case "2":
18         roman = I + I;
19         break;
20       case "3":
21         roman = I + I + I;
22         break;
23       case "4":
24         roman = I + V;
25
26         break;
27       case "5":
28         roman = V;
29         break;
30       case "6":
31         roman = V + I;
32         break;
33       case "7":
34         roman = V + I + I;
35         break;
36       case "8":
37         roman = V + I + I + I;
38         break;
39       case "9":
40         roman = I + X;
41         break;
42     }
43     arr.splice(k, 1, roman);
44   }

总代码:

 1 function convert(num) {
 2   var arr = [];
 3   var numString = "'" + num + "'";
 4   arr = numString.split("");
 5   arr.splice(0, 1);
 6   arr.splice(arr.length - 1, 1);
 7   arr.reverse();
 8
 9   function changeRoman(k) {
10
11     var I, V, X;
12     if (k === 0) {
13       (I = "I"), (V = "V"), (X = "X");
14     } else if (k === 1) {
15       (I = "X"), (V = "L"), (X = "C");
16     } else if (k === 2) {
17       (I = "C"), (V = "D"), (X = "M");
18     }
19     var roman = "";
20     var idx = arr[k];
21     switch (idx) {
22       case "1":
23         roman = I;
24         break;
25       case "2":
26         roman = I + I;
27         break;
28       case "3":
29         roman = I + I + I;
30         break;
31       case "4":
32         roman = I + V;
33
34         break;
35       case "5":
36         roman = V;
37         break;
38       case "6":
39         roman = V + I;
40         break;
41       case "7":
42         roman = V + I + I;
43         break;
44       case "8":
45         roman = V + I + I + I;
46         break;
47       case "9":
48         roman = I + X;
49         break;
50     }
51     arr.splice(k, 1, roman);
52   }
53
54   function changeRoman1(k) {
55     var roman = "";
56     var idx = arr[k];
57     for (var p = 0; p < idx; p++) {
58       roman = roman + "M";
59     }
60     arr.splice(k, 1, roman);
61   }
62   if (arr.length < 4) {
63     for (var k = 0; k < arr.length; k++) {
64       changeRoman(k);
65     }
66   } else if (arr.length == 4) {
67     for (var l = 0; l < 3; l++) {
68       changeRoman(l);
69     }
70     changeRoman1(3);
71   }
72   arr.reverse();
73   arr = arr.join("");
74   return arr;
75 }
76
77 convert(3612);

转载于:https://www.cnblogs.com/lailailee/p/7269400.html

FCC 中级算法题 罗马数字转换器相关推荐

  1. FCC 中级算法题 Where art thou

    Where art thou 写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组.如果返回的数组中包含 source 对象的属性- ...

  2. FCC 中级算法题 所有素数之和

    Sum All Primes 求小于等于给定数值的质数之和. 只有 1 和它本身两个约数的数叫质数.例如,2 是质数,因为它只能被 1 和 2 整除.1 不是质数,因为它只能被自身整除. 给定的数不一 ...

  3. 算法题---罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I : 1 V : 5 X : 10 L : 50 C : 100 D : 500 M : 1000 例如, 罗马数字 ...

  4. 每天一道算法题系列十二之整数转罗马数字

    每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/integer-to-roman/ 来源是力扣,大家喜欢可以去力扣中文 ...

  5. JAVA 判断简单密码算法_十道简单算法题二【Java实现】

    前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...

  6. FreeCodeCamp 中级算法(个人向)

    freecodecamp 中级算法地址戳这里 Sum All Numbers in a Range 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 1 function ...

  7. python 数组赋值_LeetCode基础算法题第182篇:一维数组的运行总和

    技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完.目前我选择C语言,Python和Java作为实现语言,因为这三种语 ...

  8. 算法题+JVM+自定义View,详细的Android学习指南

    前言 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 学算法真的很痛苦,虽然大数据现在很火,但找到适合自己定位的职业也未尝不是一种合理选择. ...

  9. 交互式图表_如何构建罗马数字转换器和交互式罗马数字图表

    交互式图表 The Roman numerals are no longer an essential part of our daily lives. But we do use them when ...

最新文章

  1. 解决win7系统中安装sql server 2005客户端报错问题
  2. c++ 3.变量定义
  3. 从概念到案例,机器学习应该掌握的20个知识点
  4. Java面向对象编程篇5——枚举
  5. c++使用单向链表存储一组有序数据_数据结构笔试题基础
  6. 很想去的地方面试没过_我们研究了学生在技术面试中的表现。 他们上学的地方没关系。...
  7. java 工厂模式详解_Java设计模式之工厂模式详解
  8. Django 2.0 学习(12):Django 模板语法
  9. 《西游记》中九尾狐狸为什么有太上老君的幌金绳?
  10. DevExpress v18.1新版亮点——WinForms篇(六)
  11. Android开发系列(十七):读取assets文件夹下的数据库文件
  12. css3为图片添加鼠标移入放大效果
  13. 如何查看磁盘分区情况
  14. Daily Scrum 10.31
  15. CSS3+JS制作的一款图标任意拖动,并且可以放在文件夹中
  16. linux i3 桌面,Linux 桌面平铺管理器 - i3wm
  17. 20182319《数据结构与面向对象程序设计》实验二报告
  18. Java poi 表格居中
  19. 阿里国际站各数据更新时间汇总
  20. 「Android高级工程师」BAT大厂面试基础题集合-下 Github标星6.5K

热门文章

  1. 使用Visual Studio编译Qt项目出现“E1696 无法打开Qt源文件”的解决方案,亲测可行
  2. prop-types详解
  3. 三维数据可视化软件html5,基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型 | 3D组态|图扑软件|数据可视化|blog...
  4. 华硕笔记本电脑重装系统后不能读取usb,不能上网
  5. 445、Java框架99 -【MyBatis - 多对多】 2020.12.23
  6. Unity3d中UGUI组件精简复盘(十八)Aspect Ratio Fitter组件
  7. 2022-11-26 linux 通过blocking_notifier_chain_register、blocking_notifier_call_chain 接收温度变化信息控制风扇
  8. 【数据分析案例】从微信接龙中随机选择k名人员出席
  9. 一只小白,在学习delphi.感觉很吃力。。
  10. Pluck Cms文件上传结合命令执行复现