f824 - 算數打油詩-加法
題目描述
題目要求解析包含漢字數字的加法算式,並輸出結果。輸入為包含三個漢字的字串,第一個和第三個漢字代表 1 到 10 的數字,第二個漢字代表加法運算符號「有」或「又」。如果第二個漢字不是「有」或「又」,則輸出「謬」。
解題思路
程式碼使用兩個字串 k 和 tans 來建立漢字數字與整數之間的映射關係。k 儲存了數字的個位數和十位數的漢字表示,tans 儲存了 0 到 20 的數字的漢字表示。程式碼首先遍歷輸入字串的前兩個漢字,找到第一個數字。然後檢查第二個漢字是否為「有」或「又」。如果不是,則輸出「謬」。如果第二個漢字是「有」或「又」,則程式碼繼續遍歷輸入字串的後兩個漢字,找到第二個數字。最後,程式碼將兩個數字相加,並使用 tans 字串輸出結果。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
//big-5
#include <iostream>
using namespace std;
string k = "一二三四五六七八九十有又";
string tans[21]={"零","一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十"};
int mp[12][2];
int main(){
string a;
for(int i=0;i<12;++i){
mp[i][0]=k[i*2];
mp[i][1]=k[i*2+1];
}
while(cin >> a){
int ans=0,s=0;
for(int j=0;j<10;++j){
if(a[0]==mp[j][0]&&a[1]==mp[j][1]){
ans+=j+1;
break;
}
}
for(int j=10;j<12;++j){
if(a[2]==mp[j][0]&&a[3]==mp[j][1]){
s=1;
break;
}
}
for(int j=0;j<10;++j){
if(a[4]==mp[j][0]&&a[5]==mp[j][1]){
ans+=j+1;
break;
}
}
if(s){
cout << tans[ans] << "\n";
}
else{
cout << "謬\n";
}
}
}