罗马数字转阿拉伯数字

1 罗马数字是位置计数吗?它的缺点是什么?
(1)位置计数:位置记数法是表示数值或对数值编码的方法。在位置记数法中,相同的符号在不同的位置可以表示不同的数量级。
一种表达数字的系统,数位按照顺序排列 ,每个数位有一个位值,数字的值是每个数位和位值的乘积之和。--引用自《计算机科学概论》
(2)罗马数字:
罗马数字是阿拉伯数字传入之前使用的一种数码。其采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:
  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
  2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
  3. 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
  4. 在一个数的上面画一条横线,表示这个数增值 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;
}

 

posted @ 2022-09-17 10:31  20221404李震  阅读(19)  评论(0编辑  收藏  举报