2018年中南大学机试题b题

2018年中南大学机试题b题

题目链接

题目描述

读入两个小于100的正整数A和B,计算A+B,注意: A+B的每一位由对应的英文字母给出。

输入

测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为zero时输入结束,相应的结果不要输出.

输出

对每个测试用例输出1行,即A+B的值.

样例输入

one + two =
three four + five six =
zero + zero =

样例输出

3
90

题目思路

这道题和之前讲过的单词替换这题思路是一样的,单词替换是讲字符串分成一个个单词,这道题也是一样。然后再进行计算。上代码

#include<stdio.h>
#include<string.h>
char digit[12][10] = {"zero","one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int judge(char *s)
{
    for(int i = 0; i < 10; i++)
    {
        if(!strcmp(digit[i], s))
            return i;
    }
}
int main()
{
    char str[100];
    int len, p;
    char word[20][20];
    int a, b, pow, temp, d[2][2], j;
    while(gets(str))
    {
        int l = strlen(str);
        p = len = 0;
        for(int i = 0; i < l; i++)
        {
            if(str[i] == '=')
            {
                continue;
            }
            if(str[i] == ' ')
            {
                word[len++][p] = '\0';
                p = 0;
            }
            else
                word[len][p++] = str[i];
        }
        pow = 1;
        p = 1;
        j = 0;
        memset(d, 0, sizeof(d));
        for(int i = len - 1; i >= 0; i--)
        {
            if(!strcmp(word[i], "+"))
            {
                p = 1;
                j++;
                continue;
            }
            d[j][p] = judge(word[i]);
            p--;
        }
        a = d[0][0] * 10 + d[0][1];
        b = d[1][0] * 10 + d[1][1];
        if(a == b && b == 0)
            break;
        printf("%d\n", a+b);
    }
    return 0;
}
发布了10 篇原创文章 · 获赞 13 · 访问量 233

猜你喜欢

转载自blog.csdn.net/Mrs_Jiangmengxia/article/details/104882538