a+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

做題的時候發現string的輸入以空格結束,bye

所以思路是不斷輸入整數,考慮到六種不同情況:

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
/*用貪心的思想做,儘量用單價最小的買,這裏需要留意的地方是,有可能用單價最低
的買會出現這種情況,就是不能湊整,但是用單價低的多買一瓶有可能會比用單價高的
其他體積的湊整便宜,所以每次都需要進行比較,和多買一瓶進行比較*/
int fun(string i){
    int j;
    if(i=="one")
        return 1;
    if(i=="zero")
        return 0;
    if(i=="two")
        return 2;
    if(i=="three")
        return 3;
    if(i=="four")
        return 4;
    if(i=="five")
        return 5;
    if(i=="six")
        return 6;
    if(i=="seven")
        return 7;
    if(i=="eight")
        return 8;
    if(i=="nine")
        return 9;


}



int main(){
    int a1=0,a2=0,flag=1;
    string s1;
    while (cin>>s1){
        if(flag==1)
        {
            a1=fun(s1);
            flag=2;
        }
        else if(flag==2&&s1!="+"){
            a1=a1*10+fun(s1);
            flag=3;
        }else if(s1=="+"){
            flag=3;
        }else if(flag==3){
            a2=fun(s1);
            flag=4;
        }else if(flag==4&&s1!="="){
            a2=a2*10+fun(s1);
            flag=4;
        }else if(s1=="="){
            if(a1==0&&a2==0)
                break;
            cout<<a1+a2<<endl;
            flag=1;
        }

    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章