罗马数字和阿拉伯数字互转
罗马数字和阿拉伯数字都是两个伟大和神奇的发明,各自代表着先进的文化,它们之间有一定的转换关系,设计一个算法,实现互相转换。
一,罗马数字:I V X L C D M 分别代表 1,5,10,50,100,500,1000 其中表示方法如下:
罗马数字 阿拉伯数字 计算方法
I 1 1
II 2 1+1
III 3 1+1+1
IV 4 -1+5
V 5 5
VI 6 5+1
IX 9 -1+10
X 10 10
... ... ...
二,阿拉伯数字转罗马数字
设计一个 char 数组存储罗马字符,char roman[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
设计一个 int 数组存储罗马字符对应的数字int value[] = {1000, 500, 100, 50, 10, 5, 1};
分析罗马数字1--9,区间可以分为:<4,4 ,>4&&<9,9 这四个区间,只需要 I 和 V 两个字符表示,同理10--90 中10的整数倍也只需要 L 和 X 两个数表示,个位数借助 I 和 V 表示。
设计代码:(num<3999)
public String intToRoman(int num) {
String sroman = "";
char roman[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
int value[] = {1000, 500, 100, 50, 10, 5, 1};
int remainder = 0;
for (int i = 0; i < 7; i += 2) {
remainder = num / value[i];
if (remainder < 4) {
for (int k = 0; k < remainder; k++) {
sroman += roman[i];
}
} else if (remainder == 4) {
sroman = sroman + roman[i] + roman[i - 1];
} else if (remainder > 4 && remainder < 9) {
sroman += roman[i - 1];
for (int k = 5; k < remainder; k++) {
sroman += roman[i];
}
} else if (remainder == 9) {
sroman = sroman + roman[i] + roman[i - 2];
}
num %= value[i];
}
return sroman;
}
二,罗马数字转阿拉伯数字
分析IV 为 -1+5 ,IX 为-1+10,可以判断当前I 下一位如果是V 或者是 X,需要变为负数,再加下一位数。同理 V 需要判断下一位是X或者是L,变为负数相加。
代码设计:
public int romanToInt(String sroman) {
if (sroman == null || sroman.equals("")) {
return 0;
}
char roman[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
int value[] = {1000, 500, 100, 50, 10, 5, 1};
int num = 0;
for (int i = 0; i < sroman.length(); i++) {
for (int j = 0; j < 7; j++) {
if (sroman.charAt(i) == roman[j]) {
if ((i < sroman.length() - 1) && (j >= 2) && (sroman.charAt(i + 1) == roman[j - 2])) {
num += -value[j];
} else if ((i < sroman.length() - 1) && (j >= 1) && (sroman.charAt(i + 1) == roman[j - 1])) {
num += -value[j];
} else {
num += value[j];
}
}
}
}
return num;
}
相关文章
- 硅谷互联网公司的开发流程
开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro
- RESTful-表述性状态转移风格
REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即
- 稳定性思考
产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能
- Supervisor守护队列发邮件
安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et
- 安装libsodium,让服务器支持chacha20等加密方式
用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod
随机推荐
- 硅谷互联网公司的开发流程
开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro
- RESTful-表述性状态转移风格
REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即
- 稳定性思考
产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能
- Supervisor守护队列发邮件
安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et
- 安装libsodium,让服务器支持chacha20等加密方式
用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod