整数转换成罗马数字

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45749665 编写一个将整数n(1 =0;后面还要添加一个i变为xxii。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45749665

编写一个将整数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];
            }
        }
    }
}

下面是我的程序的输出结果:
这里写图片描述

目录
相关文章
|
5天前
|
人工智能 运维 安全
|
3天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
10天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
848 109
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
482 12
|
4天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
5天前
|
机器学习/深度学习 传感器 算法
Edge Impulse:面向微型机器学习的MLOps平台——论文解读
Edge Impulse 是一个面向微型机器学习(TinyML)的云端MLOps平台,致力于解决嵌入式与边缘设备上机器学习开发的碎片化与异构性难题。它提供端到端工具链,涵盖数据采集、信号处理、模型训练、优化压缩及部署全流程,支持资源受限设备的高效AI实现。平台集成AutoML、量化压缩与跨硬件编译技术,显著提升开发效率与模型性能,广泛应用于物联网、可穿戴设备与边缘智能场景。
188 127