题目 B1014 福尔摩斯的约会
-
题意
DAY
: 第一个相同的字母(范围A~G),按字母序表示MON ~ SUN
HH
:第二个相同的数字或字母(范围0-9 和A-N),按题意分别表示0-9 和10-23
MM
:第三个字符串和第四个字符串第一个相同的字母对应的下标值 -
思路
按题目给的转换规则分别进行转换,注意规定好范围即可。
注意:
这里我开始用gets()
一直编译错误,这里的我真的是抓狂了。在网上搜了一下,说是PTA不支持gets()。服气。
- Code in C++
#include <iostream>
#include <cstdio>
#include <cctype>
#include <cstring>
char day[7][4] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
int main()
{
char sentence[4][61];
int lenth[4];
for (int i = 0; i < 4; ++i) {
std::cin.getline(sentence[i], 61);
lenth[i] = strlen(sentence[i]);
}
// 获取星期
int i;
for (i = 0; i < lenth[0] && i < lenth[1]; ++i) {
if ((sentence[0][i] == sentence[1][i]) && (sentence[0][i] >= 'A' && sentence[0][i] <= 'G')) {
printf("%s ", day[sentence[0][i] - 'A']);
break;
}
}
// 获取钟头数
for (i = i + 1; i < lenth[0] && i < lenth[1]; ++i) {
if ((sentence[0][i] == sentence[1][i])) {
if (isdigit(sentence[0][i])) {
printf("%02d:", sentence[0][i] - '0');
} else if (sentence[0][i] >= 'A' && sentence[0][i] <= 'N') {
printf("%02d:", sentence[0][i] - 'A' + 10);
} else {
continue; // 不可以没有这个
}
break;
}
}
// 获取分钟数
for (i = 0; i < lenth[2] && i < lenth[3]; ++i) {
if ((sentence[2][i] == sentence[3][i]) && isalpha(sentence[2][i])) {
printf("%02d", i);
break;
}
}
return 0;
}
题目 B1024 科学计数法
-
题意
将科学计数法表示的数展开为普通表示法。 -
思路
这里最开始数字的符号为-
的时候可以直接输出,然后根据定位E
的位置获取数和指数,之后对于后面的处理根据指数的正负。
指数正:需要判断剩下小数位数和指数的大小关系,小于的时候需要输出小数点。大于小于的时候不需要,然后按多余的位数输出0
即可。
指数负:直接在前面输出exp
个0
,注意第一个0输出之后要输出小数点,然后直接把获取到的数除小数点外输出即可。 -
Code in C++
#include <iostream>
#include <cstdio>
#include <string>
int str2num(const std::string &str) {
int ret = 0;
for (int i = 0; i < str.size(); ++i) {
ret = ret * 10 + str[i] - '0';
}
return ret;
}
int main()
{
std::string input, output = "";
std::cin >> input;
char pos;
if (input[0] == '-') {
printf("%c", '-');
}
int index = 0;
int lenth = input.size();
for (int i = 1; i < lenth; ++i) {
if (input[i] == 'E') {
index = i;
pos = input[index + 1];
break;
}
}
std::string num = input.substr(1, index - 1);
int nlenth = num.size();
int exp = str2num(input.substr(index+2, lenth - index - 2));
size_t point = num.find(".", 0);
// 正数处理
if (pos == '+') {
int bit = exp - nlenth + 1 + point;
if (bit < 0) {
for (int i = 0; i < nlenth; ++i) {
if (i != point ) {
printf("%c", num[i]);
}
if (i == point + exp) {
printf(".");
}
}
} else {
for (int i = 0; i < nlenth; ++i) {
if (i != point ) {
printf("%c", num[i]);
}
}
for (int i = 0; i < bit; ++i) {
printf("0");
}
}
} else {
for (int i = 0; i < exp; ++i) {
printf("0");
if (i == 0) {
printf(".");
}
}
for (int i = 0; i < nlenth; ++i) {
if (i != point ) {
printf("%c", num[i]);
}
}
}
return 0;
}
小结
PTA不支持gets()
PS
:今天想疯狂吐槽。。。 这个点浪费了我好长时间。然后就是自己逻辑上的错误问题,今天就刷了两题都快两小时,给跪了。