本題方法較多,這裏使用一種比較笨重的方法。將dict.txt中的string所有計算出其對應值,注意要使用long long類型保存,而後make_pair(string,long long)存進map,從頭開始檢查iter->second是否等於輸入的number,若是相等就輸出it->first,直到iter==map.end;若是沒有檢測到相等的,就輸出"NONE"。ios
/* ID:jzzlee1 PROG:namenum LANG:C++ */ #include <fstream> #include <string> #include<iostream> #include <algorithm> #include <cstdio> #include<map> #include<utility> using namespace std; ifstream fin("dict.txt"); ifstream fin2("namenum.in"); ofstream fout("namenum.out"); int char_num(char ch) { switch(ch) { case'A': case'B': case'C': return 2; case'D': case'E': case'F': return 3; case'G': case'H': case'I': return 4; case'J': case'K': case'L': return 5; case'M': case'N': case'O': return 6; case'P': case'S': case'R': return 7; case'T': case'U': case'V': return 8; case'W': case'X': case'Y': return 9; } } int main() { string str;long long num;string::size_type i;map<string,long long> maps; while(getline(fin,str)) { num=0; for(i=0;i!=str.size();i++) { num=num*10+char_num(str[i]); } maps.insert(make_pair(str,num)); } long long x;string ex="KRISTOPHER"; fin2>>x; map<string,long long>::iterator iter,it;bool flag=1; for(iter=maps.begin();iter!=maps.end();iter++) { if(iter->second==x) { fout<<iter->first<<endl; flag=0; } } if(flag) fout<<"NONE"<<endl; return 0; }