【考研每日一題18】比A+B有難度的浙江大學的A+B(C++)

題目地址:牛客網

題目描述:

讀入兩個小於100的正整數A和B,計算A+B. 需要注意的是:A和B的每一位數字由對應的英文單詞給出.

輸入描述:

測試輸入包含若干測試用例,每個測試用例佔一行,格式爲"A + B =",相鄰兩字符串有一個空格間隔.當A和B同時爲0時輸入結束,相應的結果不要輸出.

輸出描述:

對每個測試用例輸出1行,即A+B的值.

示例1

輸入

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

輸出

3
90
96

分析:

用了各種開關來控制前後的值。我感覺看我代碼應該可以看懂,有人問再寫分析。

代碼:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string t[11]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"};
    string a;
    int sum;
    int f1=0,f2=0,f=0;
    int l1=0,l2=0,l=0;
    int b1=0,b2=0,b3=1,b4=1;
    while(cin>>a)
    {
        if(a=="=")
        {
            if(b4==2)l=l1*10+l2;
            else l=l1;
            if(f==0&&l==0)break;
            sum=f+l;
            cout<<sum<<endl;
            f1=0,f2=0,f=0;
            l1=0,l2=0,l=0;
            b1=0,b2=0,b3=1,b4=1;
            continue;
        }
        if(a=="+")
        {
            if(b2==1)f=f1*10+f2;
            else f=f1;
            b2=1;
            b3=0,b4=0;
            continue;
        }
        if(b1==0){
            for(int i=0;i<11;i++)
            {
                if(t[i]==a)f1=i;
                b1=1;
            }
            continue;
        }
        if(b1==1&&b2==0){
            for(int i=0;i<11;i++)
            {
                if(t[i]==a)f2=i;
                b2=1;
            }
            continue;
        }
        if(b3==0)
        {
            for(int i=0;i<11;i++)
            {
                if(t[i]==a)l1=i;
            }
            b3=1;
            continue;
        }
        if(b3==1&&b4==0)
        {
            for(int i=0;i<11;i++)
            {
                if(t[i]==a)l2=i;
            }
            b4=2;
            continue;
        }
    }
    return 0;
}

2020.4.6

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