罗马数字转阿拉伯数字
问: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 ;
}



浙公网安备 33010602011771号