輸入格式為 "單詞 + 單詞 = ",每個單詞代表一位數字(zero 到 nine)。將兩個英文數字轉換為整數相加,輸出結果。輸入以 "zero + zero =" 結束。
使用 map<string, int> 建立單詞到數字的映射。讀取第一個加號前的單詞構成第一個數,讀取等號前的單詞構成第二個數,利用字符串流處理輸入。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <map>
using namespace std;
int main() {
int a, b;
string str1, str2;
map<string, int> m;
m["zero"] = 0; m["one"] = 1; m["two"] = 2; m["three"] = 3;
m["four"] = 4; m["five"] = 5; m["six"] = 6; m["seven"] = 7;
m["eight"] = 8; m["nine"] = 9;
while (a + b) {
a = 0; b = 0;
while (cin >> str1 && str1 != "+")
a = a * 10 + m[str1];
while (cin >> str2 && str2 != "=")
b = b * 10 + m[str2];
if (a + b) printf("%d\n", a + b);
}
return 0;
}
map 實現 O(log n) 字符串到整數映射,n=10 時近似 O(1)cin >> str 自動跳過空白字符while (cin >> str1 && str1 != "+") 精確控制讀取邊界a = a * 10 + m[str] 模擬多位數拼接輸入:one + two = → a=1, b=2 → 輸出 3
輸入:three four + five six = → a=34, b=56 → 輸出 90