【ACM】PAT. B1044 火星数字【STL】

本文介绍了一种解决PAT.A1100火星数进制转换问题的方法,通过使用C++实现了一个从十进制到火星数及从火星数到十进制的转换程序。该程序利用了字符串处理技术和map容器来建立火星数与十进制数之间的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

| 题目链接 (与PAT. A1100同题)
| 题目分析

进制转换 + 字符串处理

| 解题思路

1、由于输入的不确定性,直接使用getline(cin, str) 读入一整行

2、先打表,用 map<string, int> 表示进制转换关系(mapstring可以带空格)

Tips:题目没有明说,对于Mars,当高位有值,低位为0时,只输出高位
如: 26 应该表示为 hel 而不是 hel tret


| AC程序(C++)
/**************************
//@Author: 3stone
//@ACM: PAT. A1100 Mars Numbers
//@Time: 17/3/5
//@IDE: VS2017
***************************/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<map>
using namespace std;

string low[14] = {"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
string high[14] = {"tret","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};

string etom[300];
map<string, int> mtoe;

int main(){

    int n;
    string str; 

    for(int i = 0; i < 13; i++){//初始化 数制转换关系
        mtoe[low[i]] = i;
        mtoe[high[i]] = i * 13;

        etom[i] = low[i];
        etom[i * 13] = high[i];
    }

    //组成火星两位数的map映射
    for(int i = 1; i < 13; i++)  
        for(int j = 1; j < 13; j++){ //个位 
            string str = high[i] + " " + low[j];
            etom[i * 13 + j] = str;
            mtoe[str] = i * 13 + j;
        }

    scanf("%d%*c", &n);

    for(int i = 0; i < n; i++){
        int num = 0;
        getline(cin, str);
        //数字 
        if(str[0]>='0' && str[0] <= '9'){   
            for(int j = 0; j < str.length();j++) //字符串转数字
                num = num * 10 + (str[j] - '0');
            printf("%s\n", etom[num].c_str());  
        }
        //字符串(火星数字)
        else{ 
            cout << mtoe[str] << endl;  //map直接输出
        }   
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值