zoukankan      html  css  js  c++  java
  • 1044 火星数字

    1044 火星数字 (20 分)

    火星人是以 13 进制计数的:

    • 地球人的 0 被火星人称为 tret。
    • 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
    • 火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。

    例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。

    输入格式:

    输入第一行给出一个正整数 N(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者4

    29
    5
    elo nov
    tmay
    分析:因为给出的可能是数字(地球文)也有可能是字母(火星文),所以用字符串s保存每一次的输入,因为如果是火星文则会出现空格,所以用getline接收一行的输入~计算string s的长度len,判断s[0]是否是数字,如果是数字,表示是地球文,则需要转为火星文,执行func1();如果不是数字,则说明是火星文,需要转为地func1(int t)中,传入的值是string转int后的结果stoi(s),因为数字最大不超过168,所以最多只会输出两位火星文,如果t / 13不等于0,说明有高位,所以输出b[t/13];如果输出了高位(t/13不等于0)并且t % 13不等于0,说明有高位且有低位,所以此时输出空格;如果t % 13不等于0,说明有低位,此时输出a[t % 13];注意,还有个数字0没有考虑,因为数字0取余13等于0,但是要特别输出tret,所以在func1的最后一句判断中加func2()中,t1和t2一开始都赋值0,s1和s2用来分离火星文单词,因为火星文字符串只可能一个单词或者两个单词,而且一个单词不会超过4,所以先将一个单词的赋值给s1,即s1 = s.substr(0, 3);如果len > 4,就将剩
    #include <iostream>
    #include <string>
    using namespace std;
    string a[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
    string b[13] = {"####", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
    string s;
    int len;
    void func1(int t) {
        if (t / 13) cout << b[t / 13];
        if ((t / 13) && (t % 13)) cout << " ";
        if (t % 13 || t == 0) cout << a[t % 13];
    }
    void func2() {
        int t1 = 0, t2 = 0;
        string s1 = s.substr(0, 3), s2;
        if (len > 4) s2 = s.substr(4, 3);
        for (int j = 1; j <= 12; j++) {
            if (s1 == a[j] || s2 == a[j]) t2 = j;
            if (s1 == b[j]) t1 = j;
        }
        cout << t1 * 13 + t2;
    }
    int main() {
        int n;
        cin >> n;
        getchar();
        for (int i = 0; i < n; i++) {
            getline(cin, s);
            len = s.length();
            if (s[0] >= '0' && s[0] <= '9')
                func1(stoi(s));
            else
                func2();
            cout << endl;
        }
        return 0;
    }
     
  • 相关阅读:
    【Flutter 实战】1.20版本更新及新增组件
    【Flutter 实战】各种各样形状的组件
    【Flutter 实战】全局点击空白处隐藏键盘
    Flutter —布局系统概述
    【Flutter 实战】17篇动画系列文章带你走进自定义动画
    lvs负载简介,原理,常见使用案例及Keepalived高可用
    02 . MongoDB复制集,分片集,备份与恢复
    Go之Casbin简介,安装,模型,存储,函数
    govendor包管理及Go项目热加载
    教你三招快速文件批量重命名方法
  • 原文地址:https://www.cnblogs.com/yfr2zaz/p/10386514.html
Copyright © 2011-2022 走看看