题目
代码
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
#define max 5000
int trans_days(string data)
//通过输入的字符串获得对应的天数
{
int day,month,year,sum=0,j=0,i=0;
string middle,m0;
string H_month[19]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu"};
int len=data.size();
// cout<<"len:"<<len<<endl;
for(i=0;i<len;i++)
{
// cout<<data[i]<<endl;
if(data[i]=='.')
{
sum=0;
for(j=0;j<m0.size();j++)
{
sum=sum*10+m0[j]-'0';
}
day=sum;
// cout<<"day:"<<day<<endl;
m0.clear();
}
else if(data[i]==' ')
{
for(j=0;j<19;j++)
{
if(H_month[j]==m0)
{
month=j+1;
// cout<<"month:"<<month<<endl;
break;
}
}
m0.clear();
}
else if(data[i]=='\n')
{
sum=0;
for(j=0;j<m0.size();j++)
{
sum=sum*10+m0[j]-'0';
}
year=sum;
// cout<<"year:"<<year<<endl;
m0.clear();
}
else
{
m0+=data[i];
}
}
sum=0;
for(i=0;i<year;i++)
sum+=365;
for(i=1;i<month;i++)
sum+=20;
sum+=day;
return sum;
}
void trans(int days)
//通过天数得到Tzolkin日历
{
string T_day[20]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
int month,day,year,rest;
year=days/260;
rest=days%260;
month=rest%13+1;
//month对应Number,即从1开始故month需+1
day=rest%20;
//day对应NameOfTheDay,%20的结果从0开始故day无需+1,直接T_day[day]找对应的名字即可
cout<<month<<" "<<T_day[day]<<" "<<year<<endl;
}
int main()
{
int T,days;
int i=0;
cin>>T;
cin.get();
//输入T后回车被cin忽略但被while中的scanf接收导致for循环结束data为空故在cin>>T后加cin.get接收回车
string data;
char d1;
while(T--)
{
for(i=0;i<max;i++)
{
//d1=cin.get();
scanf("%c",&d1);
data+=d1;
if(d1=='\n')
break;
}
days=trans_days(data);
trans(days);
data.clear();
memset(d,0,sizeof(d));
}
return 0;
}
遇到的问题
-
输入T后回车被cin忽略但被while中的scanf接收导致for循环结束data为空故在cin>>T后加cin.get接收回车
-
如何输入带有空格的字符串
scanf("%[^\n]")
相关博客