九度oj-1010

题目描述:

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

输入:

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

输出:

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

样例输入:

one + two =
three four + five six =
zero seven + eight nine =
zero + zero =

样例输出:

3
90
96

代码

#include <stdio.h>  
#include <string.h>  

char praseStr(char s[20])  
{     
char c;   
switch(s[0])  
{  
case 'z':  
    c = '0';  
    break;  
case 'o':  
    c = '1';  
    break;  
case 't':   
    if (strcmp(s, "two") == 0)  
        c = '2';  
    else  
        c = '3';  
    break;  
case 'f':   
    if (strcmp(s, "four") == 0)  
        c = '4';  
    else  
        c = '5';  
    break;  
case 's':   
    if (strcmp(s, "six") == 0)  
        c = '6';  
    else  
        c = '7';  
    break;  
case 'e':  
    c = '8';  
    break;  
case 'n':  
    c = '9';  
    break;  
default:  
    c = s[0];  
    break;  
}  

return c;  
}  


int main(void)  
{  
    char s[6][20];  
    char c[6];  
    int count;  
    int a, b;  

while (1)  
{  
    count = 0;  
    while (scanf("%s", s[count]))  
    {  
        c[count] = praseStr(s[count]);  
        count ++;  
        if (c[count-1] == '=')  
            break;  
    }  

    a = 0;  
    b = 0;  
    for (int i=0; i<count; i++)  
    {  
        if (c[i] == '+' || c[i] == '=')  
            continue;  
        if (i < 2)  
            a = a*10 + c[i]-48;  
        else  
            b = b*10 + c[i]-48;  
        //printf("%d\n", a);  
        //printf("%d\n", b);  
    }  

    if (a == 0 && b == 0)  
        break;  

    printf("%d\n", a+b);  
}  

return 0;  
}  

作者提醒

基本的字符串处理题,没什么难度。

C语言读取一行可以用gets(s)。