P-A+B(第2四半期水)

4059 ワード

Description
100未満の2つの正の整数AとBを読み込む、A+Bを計算する.
なお、AとBの各数字は、対応する英語の単語によって与えられる.        
                
Input
テスト入力はいくつかのテスト用例を含み、各テスト用例は1行を占め、フォーマットは「A+B=」であり、隣接する2つの文字列にはスペース間隔がある.AとBが同時に0の場合に入力が終了する、その結果は出力されない.        
                
Output
試験例毎に1行、すなわちA+Bの値を出力.        
                
Sample Input
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
                
Sample Output
3 90 96
 
#include <iostream>
#include <string>
using namespace std;
int g(string str)
{
    if(str=="zero")return 0;
    if(str=="one")return 1;
    if(str=="two")return 2;
    if(str=="three")return 3;
    if(str=="four")return 4;
    if(str=="five")return 5;
    if(str=="six")return 6;
    if(str=="seven")return 7;
    if(str=="eight")return 8;
    if(str=="nine")return 9;
}
int main()
{
    string a[15];
    while(cin>>a[0]>>a[1]>>a[2]){
        int i,k1,k2;
        for(i=3;;i++){
            cin>>a[i];
            if(a[i]=="=")break;
        }
        if(a[0]=="zero"&&a[1]=="+"&&a[2]=="zero"&&a[3]=="=")break;
        if(a[1]=="+"){
            k1=g(a[0]);
            if(a[3]=="=")k2=g(a[2]);
            else k2=g(a[2])*10+g(a[3]);
        }
        else{
            k1=10*g(a[0])+g(a[1]);
            if(a[4]=="=")k2=g(a[3]);
            else k2=g(a[3])*10+g(a[4]);
        }
        cout<<k1+k2<<endl;
    }
    //system("pause");
    return 0;
}

文字列の柔軟性を維持