ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

XTU,C语言,a+b VI

2021-11-28 16:59:39  阅读:152  来源: 互联网

标签:XTU int VI sum len C语言 罗马数字 num str


题目描述

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

字母
I1
V5
X10
L50
C100
D500
M1000

表示规则如下:

  • 数字的值是为所有字母的值的和。比如说II=2,XIII=13
  • 没有0,比如207使用两个100,1个5,2个1表示,即CCVII
  • 字母应该按值的降序从左到右排列,但为了避免太多的重复(比如IIII),使用减法来缩短式子
    1. 使用I在V和X前,表示4(IV)和9(IX)
    2. 使用X在L和C前,表示40(XL)和90(XC)
    3. 使用C在D和M前,表示400(CD)和900(CM)

输入

每行输入一个罗马数字,字符串长度不超过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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有