湘潭大学 湘大 XTU OJ 1217 A+B VII 题解(非常详细)

news2024/11/25 9:59:09

链接 

1217

题目

题目描述

小明非常高兴你能帮他处理那些罗马数字,他想学着自己写罗马数字,但是他不知道自己到底写对了没有。 请你帮他写个程序,能正确地将10进制数字转换成罗马数字,以便他能进行核对。 罗马数字是使用字母组合表示数字的。不同的字母表示的值如下表:

字母
I1
V5
X10
L50
C100
D500
M1000

表示规则如下:

  • 数字的值是为所有字母的值的和。比如说II=2,XIII=13
  • 没有0,比如207使用两个100,1个5,2个1表示,即CCVII
  • 字母应该按值的降序从左到右排列,但为了避免太多的重复(比如IIII),使用减法来缩短式子
    1. 使用I在V和X前,表示4(IV)和9(IX)
    2. 使用X在L和C前,表示40(XL)和90(XC)
    3. 使用C在D和M前,表示400(CD)和900(CM)

输入

每行输入一个整数n,1≤n≤10,000。

输出

每行输出对应十进制整数的罗马数字。

样例输入

1
2
3
4
9999
10000

样例输出

I
II
III
IV
MMMMMMMMMCMXCIX
MMMMMMMMMMd

代码

#include<iostream>

using namespace std;

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		//1,5,10,50,100,500,1000
		//I,V, X, L, C,  D,  M
		//4,  9, 40,90,	400,	900
		//IV,IX, XL,XC,	CD,		CM
		if(n/1000>0)	
		{
			int q=n/1000;
			for(int i=0;i<q;i++)
				printf("M");
			
			n%=1000;
		}
		if(n/900>0)
		{
			int q=n/900;
			for(int i=0;i<q;i++)
				printf("CM");
			
			n%=900;
		}
		if(n/500>0)
		{
			int q=n/500;
			for(int i=0;i<q;i++)
				printf("D");
			
			n%=500;
		}
		if(n/400>0)
		{
			int q=n/400;
			for(int i=0;i<q;i++)
				printf("CD");
			
			n%=400;
		}
		if(n/100)
		{
			int q=n/100;
			for(int i=0;i<q;i++)
				printf("C");
			
			n%=100;
		}
		if(n/90)
		{
			int q=n/90;
			for(int i=0;i<q;i++)
				printf("XC");
			
			n%=90;
		}
		if(n/50)
		{
			int q=n/50;
			for(int i=0;i<q;i++)
				printf("L");
			
			n%=50;
		}
		if(n/40)
		{
			int q=n/40;
			for(int i=0;i<q;i++)
				printf("XL");
			
			n%=40;
		}
		if(n/10)
		{
			int q=n/10;
			for(int i=0;i<q;i++)
				printf("X");
			
			n%=10;
		}
		if(n/9)
		{
			int q=n/9;
			for(int i=0;i<q;i++)
				printf("IX");
			
			n%=9;
		}
		if(n/5)
		{
			int q=n/5;
			for(int i=0;i<q;i++)
				printf("V");
			
			n%=5;
		}
		if(n/4)
		{
			int q=n/4;
			for(int i=0;i<q;i++)
				printf("IV");
			
			n%=4;
		}
		for(int i=0;i<n;i++)
			printf("I");
		
		printf("\n");
	}
	return 0;
}

总结

1.没有想到是一个考察耐心的题目,硬是写了116行

2.首先把每一种情况的罗马数字写出来,就像我在代码里面注释的那样

3.然后就是从大到小,分情况罗列,整除是向下取整,把我们输入的数字除以这些数字

//1,5,10,50,100,500,1000
//I,V, X, L, C,  D,  M
//4,  9, 40,90,	400,	900
//IV,IX, XL,XC,	CD,		CM

把这个数字保存下来,表示循环的次数,设置一个循环输出罗马数字,然后在循环外面把高位去掉(取模运算),把低位去掉是除法

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/904188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker运行Nacos容器,过一会就报错`UnsatisfiedDependencyException`

Docker运行Nacos容器&#xff0c;过一会就报错UnsatisfiedDependencyException 问题背景&#xff1a; 最近要上线一个项目&#xff0c;由于要使用Nacos作为服务注册中心&#xff0c;为了方便&#xff0c;我就打算直接使用Docker部署Nacos&#xff0c;没想到Nacos启动没一会就嗝…

三、Kafka生产者

目录 3.1 生产者消息发送流程3.1.1 发送原理 3.2 异步发送 API3.3 同步发送数据3.4 生产者分区3.4.1 kafka分区的好处3.4.2 生产者发送消息的分区策略3.4.3 自定义分区器 3.5 生产者如何提高吞吐量3.6 数据可靠性 3.1 生产者消息发送流程 3.1.1 发送原理 3.2 异步发送 API 3…

SAP MM学习笔记26- SAP中 振替转记(转移过账)和 在库转送(库存转储)2- 品目Code振替转记 和 在库转送

SAP 中在库移动 不仅有入库&#xff08;GR&#xff09;&#xff0c;出库&#xff08;GI&#xff09;&#xff0c;也可以是单纯内部的转记或转送。 1&#xff0c;振替转记&#xff08;转移过账&#xff09; 2&#xff0c;在库转送&#xff08;库存转储&#xff09; 1&#xff…

代码部署到服务器

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

阿里云无影云电脑/云桌面收费价格表_使用申请方法

阿里云无影云电脑配置具体收费价格表&#xff0c;4核8G企业办公型云电脑可以免费使用3个月&#xff0c;无影云电脑地域不同价格不同&#xff0c;无影云电脑费用是由云桌面配置、云盘、互联网访问带宽、AD Connector 、桌面组共用桌面session 等费用组成&#xff0c;阿里云百科分…

Linux驱动开发(Day5)

思维导图&#xff1a; 不同设备号文件绑定&#xff1a;

springboot sl4j2 写入日志到mysql

问题描述 springboot初始化的时候&#xff0c;会先初始化日志然后再加载数据源如果用配置文件进行初始化&#xff0c;那么会出现数据源没有加载成功&#xff0c;导致空指针异常 报错排查如下&#xff1a; 搜索报错信息&#xff0c;OBjects.invoke is Null打断点发现。dataso…

简历本-专业在线简历制作下载网站 自带智能简历诊断

简历本是一个高效的在线简历制作与管理工具&#xff0c;为求职者提供专业简历模板&#xff0c;使用简历本5分钟就能制作一份优秀简历&#xff0c;可随时随地将简历下载为Word、PDF、图片格式文件&#xff0c;可在线发送或投递&#xff0c;不过使用需要注册登陆&#xff0c;提供…

【NLP】1、BERT | 双向 transformer 预训练语言模型

文章目录 一、背景二、方法 论文&#xff1a;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 出处&#xff1a;Google 一、背景 在 BERT 之前的语言模型如 GPT 都是单向的模型&#xff0c;但 BERT 认为虽然单向&#xff08;从左到右预测…

【机器学习实战】朴素贝叶斯:过滤垃圾邮件

【机器学习实战】朴素贝叶斯&#xff1a;过滤垃圾邮件 0.收集数据 这里采用的数据集是《机器学习实战》提供的邮件文件&#xff0c;该文件有ham 和 spam 两个文件夹&#xff0c;每个文件夹中各有25条邮件&#xff0c;分别代表着 正常邮件 和 垃圾邮件。 这里需要注意的是需要…

Brain:背内侧前额叶/背侧前扣带皮层(dmPFC/dACC)的相关争议

摘要 背内侧前额叶皮层/背侧前扣带皮层(dmPFC/dACC)是一个功能存在诸多理论和争议的脑区。甚至其精确的解剖边界也饱受争议。在过去的几十年里&#xff0c;dmPFC/dACC与15种以上的认知过程相关联&#xff0c;这些过程有时看起来完全无关(例如&#xff0c;身体感知、认知冲突)。…

c++优先级队列的模拟实现代码

了解&#xff1a; 1.优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的。 2. 类似于堆&#xff0c;在堆中可以随时插入元素&#xff0c;并且只能检索最大堆元素(优先队列中位于顶部的元素)。 3. 优先队列被实现为…

开箱报告,Simulink Toolbox库模块使用指南(四)——S-Fuction模块

文章目录 前言 S-Fuction模块 电路方程模型 编写S函数 仿真验证 Tips 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;一&#xff09;——powergui模块》 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff…

三维重建 PyQt Python MRP 四视图(横断面,冠状面,矢状面,3D)

本文实现了 Python MPR 的 四视图&#xff0c;横断面&#xff0c;冠状面&#xff0c;矢状面&#xff0c;3D MPR(multi-planner reformation)也称多平面重建&#xff0c;多重面重建是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行冠状、矢状位、…

(win系统)MSVCP100/110/120/140.dll丢失 - 解决方案

首先我们来介绍一下什么是dll dll简称动态链接库它可以节省存储空间&#xff1a;由于DLL可以被多个程序共享&#xff0c;因此可以减少磁盘空间的使用。也能提高代码重用率&#xff1a;通过使用DLL,我们可以将一些常用的功能封装成独立的模块&#xff0c;从而提高代码的重用率。…

库克很高兴中国成全球最大的iPhone市场,人民日报的呼吁该重视了

日前苹果CEO库克在微博发文&#xff0c;庆祝苹果公司进入中国市场30周年&#xff0c;对员工、顾客和合作伙伴感谢&#xff0c;库克如此高兴的原因在于今年二季度iPhone在中国市场的销量超越美国市场&#xff0c;由此中国市场首次成为苹果的最大收入来源市场。 中国超越美国成为…

【C++_primary】类和对象 —— 类

类 ~ ~ ~ 一、面向过程和面向对象初步认识a. 面向过程编程b. 面向对象编程例如&#xff1a;无人机送货系统1、面向过程编程方式2、面向对象编程方式 二、类的引入1、定义类的关键字2、栈的手动实现a. C语言实现栈b. C实现栈 三、类的定义类的两种定义方式&#xff1a; 四、类的…

合宙Air724UG LuatOS-Air LVGL API--对象

对象 概念 在 LVGL 中&#xff0c;用户界面的基本构建块是对象。例如&#xff0c;按钮&#xff0c;标签&#xff0c;图像&#xff0c;列表&#xff0c;图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性&#xff1a; Position (位置) Size (尺寸) Parent (父母…

ATTCK实战系列——红队实战(一)

目录 搭建环境问题 靶场环境 web 渗透 登录 phpmyadmin 应用 探测版本 写日志获得 webshell 写入哥斯拉 webshell 上线到 msf 内网信息收集 主机发现 流量转发 端口扫描 开启 socks 代理 服务探测 getshell 内网主机 浏览器配置 socks 代理 21 ftp 6002/700…

vue3 基础知识

vue3创建一个项目 PS D:\code> npm init vuelatestVue.js - The Progressive JavaScript Framework√ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for sta…