罗马数字转阿拉伯数字
1 罗马数字是位置计数吗?它的缺点是什么?
(1)位置计数:位置记数法是表示数值或对数值编码的方法。在位置记数法中,相同的符号在不同的位置可以表示不同的数量级。
一种表达数字的系统,数位按照顺序排列 ,每个数位有一个位值,数字的值是每个数位和位值的乘积之和。--引用自《计算机科学概论》
(2)罗马数字:
罗马数字是阿拉伯数字传入之前使用的一种数码。其采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:
-
相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
-
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
-
小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
-
在一个数的上面画一条横线,表示这个数增值 1,000 倍。
本人认为罗马数字不是位置计数。
(3)缺点:罗马数字没有0
罗马数字表示大数不方便
罗马数字不直观
2.学号转化20221404 分割为2022 1404 2022 MMXXII 1404 MCDIV
对于相关程序不会,所以参考网上C语言相关程序
#include<stdio.h> #include<stdlib.h> #include<string.h> //罗马数字有 I\V\X\L\C\D\M int RomaoToint(char* s,int len)//s代表输入的罗马数字 { int num = 0; int flag = 0;//用flag=0来处理一般情况,flag=1来处理特殊位置 for (int i = 0; i < len;i++) { switch (*(s+i)) { case 'M': num += 1000; break; case 'D': num += 500; break; case 'C': if (i + 1 < len&&*(s + i + 1) == 'D' || *(s + i + 1) == 'M') { num -= 100; } else { num += 100; } break; case 'L': num += 50; break; case 'X': if (i + 1 < len&&*(s + i + 1) == 'L' || *(s + i + 1) == 'C') { num -= 10; } else { num += 10; } break; case 'V': num += 5; break; case 'I': if (i + 1 < len&&*(s + i + 1) == 'V' ||*(s + i + 1) == 'X') { num -= 1; } else { num += 1; } break; } } return num; } //主函数用来调试代码输出结果 int main() { char arr[100] = { 0 }; printf("请输入一个罗马数字代表的数:"); scanf("%s", &arr); int len=strlen(arr); int s=RomaoToint(arr,len); printf("%d\n", s); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统