1100 Mars Numbers (20分)
题目描述如下
题目分析
在火星上用的是十三进制在地球上用的是10进制,题目要求写一个两者之间转换的程序.
本题数据量较少,故采用直接打表方式完成。
注意要点
1,getline函数的使用---get(cin ,string a)
2,不同的映射要分辨清楚
3,getline(cin,str)会吸收上一个cin多余的回车符,要在使用前用getchar()吸收一下,或者采用scanf("%d%*",a)方式忽略掉后面一个多余的符号。
代码如下
cpp
#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
map<string,int>mp;
map<int,string>mp3;
string digit[13]={"tret","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
string digit1[13]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
void intit()
{
for(int i=0;i<13;i++)
{mp[digit1[i]]=i;
mp3[i]=digit1[i];
}
for(int i=13;i<169;i++)
{
int num10,num1;
num10=i/13;
num1=i%13;
if(num1!=0)
{ string b2;
b2=digit[num10]+" "+digit1[num1];
mp[b2]=i;
mp3[i]=b2;
}
else
{
string b2;
b2=digit[num10];
mp[b2]=i;
mp3[i]=b2;
}
}
}
int main()
{
intit();
int n;
scanf("%d%*c",&n);
for(int i=0;i<n;i++)
{
string a;
getline(cin,a);
if(a[0]>='a'&&a[0]<='z')
{ printf("%d\n",mp[a]);}
else
{
int num=0;
for(int i=0;i<a.length();i++)
{ num=num*10+(a[i]-'0');}
printf("%s\n",mp3[num].c_str());
}
}
return 0;
}
bug
这题卡了我好久,开始用的是按输入来分别计算的方法,但后面代码写完发现运行完全没有输出,之后采用打表的方式重写一遍。发现是输入字符串时没有吸收上一次的回车键导致的。修改后在提交测试样例有两处错误。后来发现是因为将一处的digit1写成了digit,修改后测试全部通过。