哈尔滨理工大学 2017 新生赛 D题简析

版权声明:小白见解,谁看得上 https://blog.csdn.net/weixin_43368425/article/details/83216696

闲话不多说,请看题

此图截自ToRe_前辈的博客

 此图截自ToRe_前辈的博客

个人认为此题的难点只在于读懂题意,主要就是明白字符与阿拉伯数字的转化关系,但是作为新手来说,还是有几点问题需要注意:
1 比较大的数组应尽量声明在main函数外,否则程序可能无法运行;
2 使用scanf("%s")输入字符串时,需注意。它碰到空格,TAB,以及换行符就会停下来。
3 可以尽量把变量名声明长一点,增强其可读性,但是在不断的学习中会见到一些比较规范化的变量名,就如len常用来表示字符串的长度。
OK , 代码如下
 

#include<stdio.h>
#include<string.h>
char s[100];
//设置一个数组储存所输入的字符串
int main()
{
    while(scanf("%s", s) != EOF)
    {
        int len = strlen(s), result = 0;
        //得到字符串的长度,以设置循环进行计算
        for(int i = 0; i < len; i++)
        {
            if(s[i] == 'I' && s[i+1] == 'V')
                result -= 1;
            else if(s[i] == 'I' && s[i+1] == 'X')
                result -= 1;
            else if(s[i] == 'X' && s[i+1] == 'L')
                result -= 10;
            else if(s[i] == 'X' && s[i+1] == 'C')
                result -= 10;
            else if(s[i] == 'C' && s[i+1] == 'D')
                result -= 100;
            else if(s[i] == 'C' && s[i+1] == 'M')
                result -= 100;
            else if(s[i] == 'I')
                result += 1;
            else if(s[i] == 'V')
                result += 5;
            else if(s[i] == 'X')
                result += 10;
            else if(s[i] == 'L')
                result += 50;
            else if(s[i] == 'C')
                result += 100;
            else if(s[i] == 'D')
                result += 500;
            else if(s[i] == 'M')
                result += 1000;
        }
        printf("%d\n",result);
    }
    return 0;
}

注 : 本篇文章所用的两张图片均截自ToRe_前辈的博客。

猜你喜欢

转载自blog.csdn.net/weixin_43368425/article/details/83216696