编写一个将整数n(1 <= n <= 9999)转换成罗马数字。
- 整数n(1<=n<=9999)与罗马数字表示有以下对应关系
- 1000 - m,有几个1000就有几个m对应
- 900 - 两个字符cm
- 500 - 一个字符d
- 400 - 两个字符cd
- 100 - 一个字符c,有几个100就用几个c表示
- 90 - 两个字符xc
- 50 - 一个字符l
- 40 - 两个字符xl
- 10 - 一个字符x,有一个10就用几个x
- 9 - 用两个字符ix表示
- 5 - 用一个字符v来表示
- 4 - 用两个字符iv表示
- 1 - 用一个字符i表示,有几个1就用几个i
假如说我们有一个数字22,那么它转换的方式为22-10=12>=0;
则肯定先有一个x,接着12-10=2>=0;则接着在x后面加上x 变为xx;2-1=1>=0;则肯定后面还需要添加一个i变为xxi,1-1=0>=0;后面还要添加一个i变为xxii。
这样我们可以这样做,将对应的罗马数字和对应的数字放到两个二维数组中一一对应。
char *roman[ROW][COLUMN] = {
{"m","m","m","m"},
{"cm","d","cd","c"},
{"xc","l","xl","x"},
{"ix","v","iv","i"}
};
int num[ROW][COLUMN] = {
{1000,1000,1000,1000},
{900,500,400,100},
{90,50,40,10},
{9,5,4,1}
};
这样每一个数字进入之后,从数字数组的第一个元素开始,进行减法,如果差大于等于0,接着对这个数字进行减法操作,如果小于0了,则进入下一个数字进行同样的减法操作,每次差大于等于0的时候,在后面添加上对应的罗马数字。则转换算法应该是这样的。
/**
* @brief toRoman 将数字转换成罗马数字保存到数组rom中
* @param number 要被转换的数字
* @param rom 将转换后的罗马数字保存到rom数组中
*/
void toRoman(int number,char rom[]){
int temp = number;
int i,j;
rom[0]='\0';
for(i = 0;i < ROW;i++){
for(j = 0;j < COLUMN;j++){
while((temp-num[i][j]) >= 0){
strcat(rom,roman[i][j]);
temp = temp-num[i][j];
}
}
}
}
好了,主体函数已经有了,现在附上我的整体的代码:
#include <stdio.h>
#include <string.h>
#define ROW 4
#define COLUMN 4
void toRoman(int number,char rom[]);
/**
* @brief main 编写一个将整数(1 <= x <= 9999)转化成对应的罗马数字的程序
* @return
*/
/**
* 整数n(1<=n<=9999)与罗马数字表示有以下对应关系
* 1000 - m,有几个1000就有几个m对应
* 900 - 两个字符cm
* 500 - 一个字符d
* 400 - 两个字符cd
* 100 - 一个字符c,有几个100就用几个c表示
* 90 - 两个字符xc
* 50 - 一个字符l
* 40 - 两个字符xl
* 10 - 一个字符x,有一个10就用几个x
* 9 - 用两个字符ix表示
* 5 - 用一个字符v来表示
* 4 - 用两个字符iv表示
* 1 - 用一个字符i表示,有几个1就用几个i
*
*/
/**
* 用两个二维数组保存整数和罗马数字的
* 对应关系
*/
char *roman[ROW][COLUMN] = {
{"m","m","m","m"},
{"cm","d","cd","c"},
{"xc","l","xl","x"},
{"ix","v","iv","i"}
};
int num[ROW][COLUMN] = {
{1000,1000,1000,1000},
{900,500,400,100},
{90,50,40,10},
{9,5,4,1}
};
int main(int argc,char *argv[])
{
int low,high;
if(argc < 2){
printf("Please enter the range of the numbers.\n");
}else if(argc == 2){
low = 1;
high = atoi(argv[1]);
}else if(argc == 3){
low = atoi(argv[1]);
high = atoi(argv[2]);
}else{
printf("There is more params!!\n");
}
int i = low;
for(i = low;i <= high;i++){
char rom[25];
toRoman(i,rom);
printf("%d => %s\n",i,rom);
}
return 0;
}
/**
* @brief toRoman 将数字转换成罗马数字保存到数组rom中
* @param number 要被转换的数字
* @param rom 将转换后的罗马数字保存到rom数组中
*/
void toRoman(int number,char rom[]){
int temp = number;
int i,j;
rom[0]='\0';
for(i = 0;i < ROW;i++){
for(j = 0;j < COLUMN;j++){
while((temp-num[i][j]) >= 0){
strcat(rom,roman[i][j]);
temp = temp-num[i][j];
}
}
}
}
下面是我的程序的输出结果:
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
matlab开发-罗马数字阿拉伯数字转换。这些图形用户界面将罗马数字转换为整数,反之亦然。
罗马数字翻译器使用 Java 技术将整数转换为罗马数字。
LeetCode问题12是关于“整数转罗马数字”的问题,它要求将一个整数转换为罗马数字表示。罗马数字使用七个不同的符号表示不同的值:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。为了表示其他...
分析罗马数字与十进制整数之间的关系,将输入的罗马数字转换为十进制整数
算法-罗马-数字 将整数转换为罗马数字 这是 kata“罗马数字”的实现
例如,将罗马数字"LVIII"转换为整数的过程如下: 1. 将每个符号转换为对应的数值:L=50,V=5,I=1,I=1,I=1。 2. 从左到右遍历每个数值,依次为50、5、1、1、1。由于50大于5,5大于1,1大于1,因此将它们依次加到...
本文实例讲述了Python3.5实现的罗马数字转换成整数功能。分享给大家供大家参考,具体如下: 问题概述: 给定一个罗马数字 ,将罗马数字转换成整数。 如罗马数字I,II,III,IV,V分别代表数字 1, 2, 3, 4, 51,2,3,4,...
# 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M # 字符 数值 # I 1 # V 5 # X 10 # L 50 # C 100 # D 500 # M 1000 ...# 给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内
LeetCode问题13是关于将罗马数字转换为整数的问题。罗马数字由以下七个不同的符号组成:I, V, X, L, C, D 和 M,分别代表1, 5, 10, 50, 100, 500 和 1000。罗马数字的转换规则相对简单,但需要注意的是,如果一个小...
本篇文章中小编给大家分享了一篇关于PHP将整数数字转换为罗马数字的知识点以及实例内容,需要的朋友们学习下。
这些 GUI 将罗马数字转换为整数数字,反之亦然。
罗马化 我们将编写一对程序,将转换为,反之亦然。 > ./deromanize I 1 > ./deromanize II 2 > ./deromanize MCMIV 1904 > ./romanize 1 I > ./romanize 2 II > ./romanize 1904 MCMIV 我的建议是从deromanize部分...
RomanNumerals:罗马数字<->整数转换器
这两个脚本将罗马数字与任何整数(标量、向量或矩阵)相互转换,包括大于 4999 且带有括号表示法(乘以 1000)的大数。 函数 NUM2ROMAN 使用严格的现代符号规则(4 和 9 基的减法原则),除了常见的 'MMMM' 形式...
罗马数字 一个简单的程序包,可将罗马转换为阿拉伯数字(反之亦然)。 它还可以检查有效的罗马格式。 安装 $ npm install --save roman-numbers 如何使用它 您可以要求的所有拳头如下: const {romanToArab, ...
将整数转换为罗马数字 我目前正在教 AP 计算机科学 A(我的第一年),我选择这个作业是因为我认为我的学生也可以编码。 我们刚刚了解了用户定义的类和 ArrayLists,我想我可以使用这两者来编写代码。 首先,我创建了...
罗马小肠给定一个整数,将其转换为罗马数字。 puedes probarlo恩独奏COPIA ELcódigo德尔档案馆integer_to_roman.dart。solución可升级y con el mapeadomínimo独奏5,000,10,000等,修改3999 const map = { 1: 'I'...
integer-to-roman_by_TDD:一种将整数转换为其罗马数字表示形式的字符串的函数,该函数具有由TDD开发的扭曲