当前位置: 代码迷 >> 综合 >> PAT 1044.火星数字
  详细解决方案

PAT 1044.火星数字

热度:115   发布时间:2023-11-17 23:10:50.0

思路:使用getline(cin ,some)读取整行文本

1.判断是不是数字

将字符串的数字转换为数字sum

如果sum<13 不需要进制转换,直接输出对应的个位字符串

如果大于13

如果sum是13的倍数 则只用输出高位的,个位的0不用输出

否则 打印第一位 再打印第二位


2.是字符串时

4位一循环

先判断个位上有没有对应的 把对应数字加上去

再判断高位上有没有对应的  把sum +=(对应数字+1)*13

#include<iostream>
#include<string>
using namespace std;string gewei[13] ={"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string gaowei[13] = {"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"}; int main()
{int n;cin >> n;int len;string mess; getchar();while(n--){int sum=0;getline(cin,mess);if(mess[0]>='0'&&mess[0]<='9')//数字 {for(int j=0;j<mess.size();j++){sum = sum*10 + (mess[j]-'0');	}//cout << sum;if(sum<13)cout << gewei[sum] << endl;else{if(sum%13==0){cout << gaowei[sum/13-1] << endl;}else{cout << gaowei[sum/13-1] << " " << gewei[sum%13] << endl;}}}else{for(int k=0;k<mess.size();k=k+4){string three = "";//初始化three = three+mess[k]+mess[k+1]+mess[k+2];for(int l=0;l<13;l++){if(three==gewei[l]){sum += l;}if(three==gaowei[l]){sum += sum + (l+1)*13;}	}	}cout << sum << endl;}	} 
}