Google CodeJam习题:Alien Numbers

来源:互联网 发布:淘宝网服装 编辑:程序博客网 时间:2024/05/20 05:29

题目见: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;}