【九度OJ】1010:A + B

来源:互联网 发布:手机淘宝怎么做 编辑:程序博客网 时间:2024/06/03 00:10

地址:
http://ac.jobdu.com/problem.php?pid=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
来源:
2005年浙江大学计算机及软件工程研究生机试真题

源码:

#include<stdio.h>#include<string.h>char str[ 100 ];int numA = 0;int numB = 0;int id = 0;char digitEng[ 10 ][ 6 ] = {    "zero",    "one",    "two",    "three",    "four",    "five",    "six",    "seven",    "eight",    "nine"};//zero seven + eight nine =int strToNum(){   //a是字符数组的下标    char numChar[6];    int k = 0;    int a = -1, b = -1;    while( str[ id ] != ' ' ){        numChar[ k ++ ] = str[ id ];        id ++;    }    numChar[ k ] = '\0';    for( int i = 0; i < 10; i++ ){        if( strcmp( digitEng[ i ], numChar ) == 0 ){            a = i;        }    }    id++;   //跳过空格    if( str[ id ] == '+' || str[ id ] == '=' ){        return a;    }    k = 0;    while( str[ id ] != ' ' ){        numChar[ k ++ ] = str[ id ];        id ++;    }    numChar[ k ] = '\0';    for( int i = 0; i < 10; i++ ){        if( strcmp( digitEng[ i ], numChar ) == 0 ){            b = i;        }    }    id++;   //跳过空格    return a * 10 + b;} int main(){     while( gets( str ) ){        id = 0;        numA = strToNum();        while( str[ id ] == ' ' || str[ id ] == '+'){            id ++;        }        numB = strToNum();        if( numA == 0 && numB == 0){            return 0;        }        printf( "%d\n", numA + numB );    }}/**************************************************************    Problem: 1010    User: 螺小旋    Language: C++    Result: Accepted    Time:0 ms    Memory:1020 kb****************************************************************/