其他分享
首页 > 其他分享> > XTU,C语言,a+b VI

XTU,C语言,a+b VI

作者:互联网

题目描述

小明非常喜欢做a+b的算术题,为此他搜集了很多的练习题。 今天他拿到一个很古老的练习册,上面是使用罗马数字表示的。 小明不太擅长处理罗马数字,请你帮帮他,告诉他罗马数字对应的十进制数的值。 罗马数字是使用字母组合表示数字的,不同的字母表示的值如下表:

字母
I1
V5
X10
L50
C100
D500
M1000

表示规则如下:

输入

每行输入一个罗马数字,字符串长度不超过25。测试数据保证是合法的罗马数字。

输出

每行输出对应罗马数字的十进制整数。

样例输入

MM
CM
MCD
MDX
XCIX

样例输出

2000
900
1400
1510
99

这道题只要知道了方法就很容易解出。

为了简便,可以先将每个字符转换为其所代表的数。

接下来,我们从最右边向左边依次进行运算:

设a,b,c为字符所代表的数,和为sum,然后进行判断,如果b大于c,则sum =c + b,如果b小于c,

sum = c - b。每次比较相邻的两个数,通过循环求出sum的最终结果即为所求的值。

#include <stdio.h>
#include <string.h>
char str[26];
int num[26];
void shift(int i)
{
    if(str[i]=='I')
	num[i] = 1;
	if(str[i]=='V')
	num[i] = 5;
	if(str[i]=='X')
	num[i] = 10;
	if(str[i]=='L')
	num[i] = 50;
	if(str[i]=='C')
    num[i] = 100;
    if(str[i]=='D')
    num[i] = 500;
    if(str[i]=='M')
    num[i] = 1000;
}
int main()
{
    int i,len,sum;
    while(scanf("%s",str)!=EOF)
	{
	    len = strlen(str);
	    for(i = 0;i < len;i++)
	    shift(i);//将字符转换为其所代表的数
	    sum = num[len-1];
	    for(i = len-2;i >= 0;i--)
	    {
	        if(num[i] >= num[i+1])
	        sum += num[i];
	        else
	        sum -= num[i];
	    }
	    printf("%d\n",sum);
	}
}

标签:XTU,int,VI,sum,len,C语言,罗马数字,num,str
来源: https://blog.csdn.net/m0_61465701/article/details/121593745