题目见:http://code.google.com/codejam/contest/32003/dashboard
思路:
简单的进制转换程序。首先转化成计算机里的数据,这样才能进行除法和取余,然后再转化为输出数据。
题解:
#include <iostream>
#include <fstream>
#include <string>
#include <array>
#include <algorithm>
void translate (
const std::string& alien_number,
const std::string& src,
const std::string& tgt)
{
const char src_set = src.size();
const char tgt_set = tgt.size();
std::array<char, 256> src_mapping;
for (char i = 0; i < src_set; ++i)
src_mapping[src[i]] = i;
long dec_value = 0;
for (auto& ach : alien_number)
dec_value *= src_set, dec_value += src_mapping[ach];
std::string output;
do
{
output += tgt[dec_value % tgt_set];
dec_value /= tgt_set;
}
while (dec_value != 0);
std::reverse (std::begin (output), std::end (output));
std::cout<<output<<std::endl;
}
int main (int argc, char* argv[])
{
if (argc != 2)
return 1;
std::ifstream ifs;
ifs.open(argv[1]);
if (!ifs.is_open())
return 1;
int num_aliens;
ifs>>num_aliens;
for (int i = 0; i < num_aliens; ++i)
{
std::string alien_number;
std::string src_lang;
std::string tar_lang;
ifs>>alien_number>>src_lang>>tar_lang;
std::cout<<"Case #"<<i+1<<": ";
translate (alien_number, src_lang, tar_lang);
}
return 0;
}