罗马数字转阿拉伯数字

问:1 罗马数字是位置计数吗?它的缺点是什么?
答:罗马数字不是位置计数。
位置计数系统_烟消云散的博客的博客-CSDN博客
由上述博客可知,罗马数字不是位置计数。位置计数的每一个位都有对应的数值,且每一个位对应的数值不一样。
而罗马数字没有。例如IV = 4 ,如果从位置计数的角度看,那么每一个位对应的数值都是1,存在矛盾。
缺点是:1.不够直观 2.表达繁琐 3.表达大数据时数字上的横线很多
2 把你的8位学号(20181xxx)转化成罗马数字
将8位学号分成两组转化更简易
MMXXII MCDXV 3 参考上面的博客,用C写一个罗马数字转化为阿拉伯数字的程序,并验证上面你的学号对不对
#include <stdio.h>
int num[7]={1,5,10,50,100,500,1000} ;
char rom[8]="IVXLCDM" ;
//将罗马基本数字转化为对于的阿拉伯数字
int turn(char x)
{
    int i = 0 ;
    for ( i = 0; i < 7 ; i++)
    {
        if (x == rom[i])
           break;    
    }
    return num[i] ;
}
int main()
{
    char arr[100]={} ;
    int i = 0 ;
    int a = 0 ;
    scanf("%s",&arr);//大写S会导致字符之间被空格隔开
    int c,d = 0 ; //用于比大小
    int j = 0 ;
    int n = 1 ;//后比前大,前的数量
    int l = 0 ; //后比前小,后的数量
    for ( ;arr[i] != 0 ; i+=1)
    {
        c = turn(arr[i]) ;
        d = turn(arr[i+1]) ;
        if (arr[i+1] != 0)
        {
            if (d>c)//后一位的值>前一位
        {
            a = a+d-c;
            if (arr[i+4] == 0)
                break;
            else
                i += 1 ;
        }
        }
        if (d<=c)//后一位等于、小于前一位
            a = a + c ;
        if (arr[i+1] == 0)
            a = a + c ;
       
    }
    printf("%d\n",a) ;
    return 0 ;
}

 

 

 

 
posted @ 2022-09-17 10:23  瞻鹤  阅读(39)  评论(0)    收藏  举报