最最严重的问题,
如果字符串只有一个的时候不一定就是个位,也可能是十位,这要取决于在哪个数组中出现。
还有如果是数字,比如13,那么十位是1,个位是0没问题吧,按照平时应该输出tam tret,但是这题的要求是只输出tam即可。
所以也要在代码里面特判。
我真的想吐槽C++字符串处理,java明明一个split搞定的东西,搁这截他妈的半天。
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
#define ll long long
string ge[] = {"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep","oct", "nov", "dec"};
string shi[] = {" ","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
using namespace std;
int main() {
int n;
cin>>n;
string t;
getline(cin,t);
for(int i=0; i<n; i++) {
string s;
getline(cin,s);
if(isdigit(s[0])) {
int shuzi = stoi(s);
int g = shuzi % 13;
int s = shuzi / 13;
if(s && g) {
cout << shi[s] << " " << ge[g] << '\n';
}else if(s){
cout << shi[s] << '\n';
}else if(g){
cout << ge[g] << '\n';
}else{
cout << ge[0] << '\n';
}
} else {
stringstream is(s);
vector<string> vec;
while(getline(is,s,' ')){
vec.push_back(s);
}
int res = 0;
if(vec.size()==1){
for(int j=0;j<=12;j++){
if(ge[j]==vec[0]){
res += j;
break;
}
}
for(int j=1;j<=12;j++){
if(shi[j]==vec[0]){
res += j * 13;
break;
}
}
}else{
for(int j=1;j<=12;j++){
if(shi[j]==vec[0]){
res += j * 13;
break;
}
}
for(int j=0;j<=12;j++){
if(ge[j]==vec[1]){
res += j;
break;
}
}
}
cout << res << '\n';
}
}
return 0;
}
标签:数字,1044,int,long,vec,using,tam,火星,string
From: https://www.cnblogs.com/chengyiyuki/p/18142924