Python 如何将integer转化为罗马数(3999以内)
作者:Jlinkk 发布时间:2023-01-19 12:46:51
标签:Python,integer,罗马数
1,在Python中将integer数转化为罗马数
说明:在罗马数中(3999以内),和阿拉伯数字相似,可以把它分解为个位,十位,百位,千位,然后相加(我是这么认为的+_+),所以这样就简单了,只需把不同位数的基数表示出来相加即可。
例如:
阿拉伯数字为124=100+20+4,
罗马数字为字符串相加‘CXXIV'=‘C'+‘XX'+IV''
按此规律见代码分析:
注意:4,9,40,90,400,900得用大的减小的表示(因为相同字符相连不超过三个)
def trans(n):
Dict = {0:'',1:'I',5:'V',10:'X',50:'L',100:'C',500:'D',1000:'M'} #创建一个匹配字典,注意 0:‘' 是小细节,帮助处理位系数为0的情况
num_str = str(n)
s = ''
for i in range(len(num_str)): #按位次循环相加
j = len(num_str)-1-i #字符是从左到右,10**j表示所在位次
num = int(num_str[i])
if num==0: #
s +=''
else:
N = num//5 #取整,用来判断是0+ 还是5+, 还是5-,还是10-
M = num%5 #取余,用来判断相同相连的个数,1-3用加,4用减
if M==4: #,9,40,90,400,900的情况
s+=Dict[10**(j)]+Dict[(N+1)*5*10**(j)] #右减左
else:
s+=Dict[N*5*10**(j)]+Dict[10**(j)]*M #左加右
return s
2,Python 给定一个整数,将其转为罗马数字
输入确保在 1 到 3999 的范围内
def change(text):
num=int(text)
# 数组内数据位置不要改,不然就不能从高位开始对比
checkNum = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
str =["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX","V", "IV", "I"]
roman = ""
i = 0
#对比完,减去已对比数组,对比数组下个值
while (num != 0) :
if (num >= checkNum[i]):
num -= checkNum[i]
roman += str[i]
else:
i+=1
return roman
def main():
text = input("输入整数")
print(change(text))
main()
来源:https://blog.csdn.net/qq_43571494/article/details/89715862


猜你喜欢
- 一行代码实现灰度图抠图抠图是ps的最基本技能,利用python可以实现用一行代码实现灰度图抠图。基础算法是确定图像二值化分割阈值的大津法,将
- 解决中文输入的两种应用:在脚本中加语言编码声明 “-*- coding: uft-8 -*-”应用一:print中出现中文方法一:用unic
- 问题记录一下出现的问题, 数据翻倍这是复现问题的代码data() { return { space: "
- 介绍代码地址:https://github.com/taishan1994/chinese_chengyujielong读完该文,你可以收获
- 一、深复制与浅复制列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制首先看
- 注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008).工作需要, 需要向SQL Server
- 网络上有很多关于语言选择的问题,其中关于Python和Java的问题大抵如下:Python和Java该如何选择 ?将来Python(Java
- 本文实例讲述了Golang算法问题之整数拆分实现方法。分享给大家供大家参考,具体如下:一个整数总可以拆分为2的幂的和,例如:7=1+2+47
- 什么是标签平滑?在PyTorch中如何去使用它?在训练深度学习模型的过程中,过拟合和概率校准(probability calibration
- 加班时抽空弄的,javascript图片链接定时轮换,自适应图片大小,支持预载,进行了简单封装,方便调用。发现自己还是菜得很,一个简单效果被
- 本文实例讲述了JS实现根据数组对象的某一属性排序操作。分享给大家供大家参考,具体如下:根据数组中对象的某一属性排序var newArray
- 本次爬虫思路最最重要的是分析信息接口!!!1. 获取url2. 通过请求拿到响应3. 处理反爬4. 提取信息5. 保存内容本次操练网页htt
- 前言 角点通常被定义为两条边的交点,或者说,角点的局部邻域应该具有两个不同区域的不同方向的边界。角点检测(Corner Detec
- 那你也许会问及,怎样获取当前系统日期的最大时间值,如yyyy-MM-dd 23:59:59.997。 我们可以使用DATEADD函数,来实现
- 本文实例讲述了Python生成随机数组的方法。分享给大家供大家参考,具体如下:研究排序问题的时候常常需要生成随机数组来验证自己排序算法的正确
- 最近在使用linux上进行本地登录时,发现既然无法正常登录 , 报如下错误信息:[root@xxxx ~]# mysql -h localh
- 安装MySQL,留作笔记,不知是否能够安装成功,试试吧。1、 进入mysql官网 地址<下载完毕,接下来就是安装了2、安装找到安装包,
- 如下所示:#coding=utf-8#布局自定义尺寸from tkinter import *class App:def __init__(
- WinHttp; // Microsoft WinHTTP Services, version 5.1Alias HTTPREQUEST_P
- 一、实验目标1、使用 K-means 模型进行聚类,尝试使用不同的类别个数 K,并分析聚类结果。2、按照 8:2 的比例随机将数据划分为训练