題目地址:牛客網
題目描述:
讀入兩個小於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