NC21659. 编辑器的选择
描述
输入描述
多组数据,每一组数据包含两行,每一行表示一个 16 进制数,每一个英文单词以空格分隔,每一行的最后一个
单词后无空格。每一行以 '\n' 结尾 。
10 ~ 15 的英文单词表示十六进制中的 A-F 。
输出描述
对于每组数据,输出两个数的乘积,以 10 进制表示。保证乘积不超过107
示例1
输入:
one two two
输出:
36
说明:
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 352K, 提交时间: 2018-12-08 20:26:31
#include<iostream> #include<sstream> #include<map> using namespace std; map<string, int> m; void initmap() { 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; m["ten"] = 10; m["eleven"] = 11; m["twelve"] = 12; m["thirteen"] = 13; m["fourteen"] = 14; m["fifteen"] = 15; } int toint(string s) { stringstream stream; string t; stream << s; int n = 0; while (stream >> t) n = n * 16 + m[t]; return n; } int main() { initmap(); string s; while (getline(cin, s)) { int n = toint(s); getline(cin, s); int m = toint(s); printf("%d\n", n * m); } }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 364K, 提交时间: 2018-12-08 14:41:28
#include<bits/stdc++.h> #define maxn 100010 using namespace std; string S1,S2; map<string,int> M; int main(){ 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; M["ten"]=10; M["eleven"]=11; M["twelve"]=12; M["thirteen"]=13; M["fourteen"]=14; M["fifteen"]=15; while(getline(cin,S1)){ getline(cin,S2); int a=0,b=0; stringstream A,B; string op; A<<S1,B<<S2; while(A>>op) a=a*16+M[op]; while(B>>op) b=b*16+M[op]; printf("%d\n",a*b); } return 0; }