PAT1044 火星数字
2015-09-26 14:25
295 查看
火星人是以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
tam
输出样例:
hel mar
may
115
13
解题思路:这是一道类似求任意进制的题目,难点在于:
一,输入。输入的数据里有数字与字符串,通过程序可以判断出来,并将数字字符转换为整型。
二,不同进制之间的转换,参考我们比较熟悉的16进制就可以知道任意进制转换的算法,关键是求余数。
代码如下:
(1)比较两字符串是否相同,用于确定火星文字符代表的数值。
(2)输入函数,要求该程序能自动将字符里的数字字符转换为整型,这样以后可以较方便处理。
(3)两种不同进制之间的转换
地球人的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
tam
输出样例:
hel mar
may
115
13
解题思路:这是一道类似求任意进制的题目,难点在于:
一,输入。输入的数据里有数字与字符串,通过程序可以判断出来,并将数字字符转换为整型。
二,不同进制之间的转换,参考我们比较熟悉的16进制就可以知道任意进制转换的算法,关键是求余数。
代码如下:
(1)比较两字符串是否相同,用于确定火星文字符代表的数值。
bool isSame(string strA, string strB){ bool flag = true; for (int i = 0; i < strA.length(); ++i){ if (strA[i] != strB[i]){ flag = false; break; } } if (flag)return true; else return false; }
(2)输入函数,要求该程序能自动将字符里的数字字符转换为整型,这样以后可以较方便处理。
int N,p=0,sN,num=0,k=0; string g[100] = { "" }; int nums[100] = { 0 }; cin >> N; sN = N; while (N--){ cin >> g[p]; ++p; } for (int i = 0; i < sN; ++i){ num = 0; if (g[i][0] <= '9'&&g[i][0] >= '0'){ int len = g[i].length(); for (int j = 0; j< g[i].length(); ++j){ num += ((int)g[i][j] - 48)*pow(10,--len); } nums[k++] = num; } }
(3)两种不同进制之间的转换
string Mars[13] = { "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec" }; string MarsPro[12] = { "tam", " hel", " maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", " mer", "jou" }; int num = 115; int temp = 0; int a=0,b = 0; temp = num; if (temp <= 12){ cout << Mars[temp - 1]; } else{ a = temp / 13; b = temp % 13; } cout << a << " " << b << endl; cout << MarsPro[a-1] << " "<<Mars[b] << endl; string numStr[2] = { "elo", "nov" }; string numA = { "aug" }; int k = 0, m = 0,v=1; if (v == 2){ for (int i = 0; i < 12; ++i){ if (isSame(numStr[0], MarsPro[i])){ k = i; break; } } for (int i = 0; i < 13; ++i){ if (isSame(numStr[1], Mars[i])){ m = i; break; } } cout << (k + 1) * 13 + m << endl; } else{ bool flag = false; for (int i = 0; i < 12; ++i){ if (isSame(numA, MarsPro[i])){ k = i; flag = true; cout << (k + 1) * 13 << endl; break; } } if (flag==false){ for (int i = 0; i < 13; ++i){ if (isSame(numA, Mars[i])){ m = i; cout << m << endl; break; } } } }
相关文章推荐
- AsyncTask的缺陷
- iOS事件捕捉与传递,响应者链
- 看书读书,必须少而精
- 【bzoj2134】【单选错选】【概率】
- 关于ssh 使用批注
- iOS基础-自定义视图、视图控制器
- ASP.NET显示渐变图片实现方法
- 网易163邮箱配置-iOS、OS X邮箱客户端
- Android点击两次返回键退出程序
- 修改tomcat中的字符集问题
- ios激情详解之APP工程师泡沫警示
- Swift学习笔记1——入门
- 黑马程序员-----java基础 API学习
- JavaScript高级程序设计之基本概念之语句第3.6讲笔记
- 什么是数据库之------oracle
- 第4周项目3-单链表应用(2)
- java多线程学习笔记
- 公钥\私人 ssh避password登陆
- 因果图实例
- hadoop查询一条数据