列表

详情


NC21659. 编辑器的选择

描述

我们有许多同学程序都不会写却已经掌握了 42 种编辑器的使用,并要求裁判提供它们。然而裁判太菜了,并没有安装包。裁判只有两个英文字母串表示的数,请问它们的 16 进制表示的乘积是多少。

输入描述

多组数据,每一组数据包含两行,每一行表示一个 16 进制数,每一个英文单词以空格分隔,每一行的最后一个
单词后无空格。每一行以 '\n' 结尾 。

10 ~ 15 的英文单词表示十六进制中的 A-F 。

输出描述

对于每组数据,输出两个数的乘积,以 10 进制表示。保证乘积不超过107

示例1

输入:

one two
two

输出:

36

说明:

(12)_{16} * (2)_{16} = 18 * 2 = 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;
}

上一题