您的位置:首页 > 其它

暴力破解练习(二)罗马数字

2018-03-11 16:11 127 查看
古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,
所以在现代很少使用了。
之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!
罗马数字的表示主要依赖以下几个基本符号:

I --> 1
V --> 5
X --> 10
L --> 50
C --> 100
D --> 500
M --> 1000

这里,我们只介绍一下1000以内的数字的表示法。
单个符号重复多少次,就表示多少倍。最多重复3次。
比如:CCC表示300  XX表示20,
但150并不用LLL表示,这个规则仅适用于I X C M。

如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。
比如:IX表示9  IV表示4  XL表示40
49 = XLIX 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int returnNum(char *s,int num)
{
int sum = 0;
for (int i = 0; i < num; i++)
{
char c = s[i];
if (c == 'I') sum += 1;
if (c == 'V') sum += 5;
if (c == 'X') sum += 10;
if (c == 'L') sum += 50;
if (c == 'C') sum += 100;
if (c == 'D') sum += 500;
if (c == 'M') sum += 1000;
}
//strstr c语言的匹配
if (strstr(s,"IV")!=NULL)
{
sum -= 2;
}
if (strstr(s, "IX") != NULL)
{
sum -= 2;
}
if (strstr(s, "XL") != NULL)
{
sum -= 20;
}
if (strstr(s, "XC") != NULL)
{
sum -= 20;
}
if (strstr(s, "CD") != NULL)
{
sum -= 200;
}
if (strstr(s, "CM") != NULL)
{
sum -= 200;
}
return sum;

}
int main()
{
int a=returnNum("MCCCXIV",7);
printf("%d\n",a);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: