3个示例都通过了,可提交上去,有3个case没过,搞的我一头雾水,有些懵圈。
老码农让我又加测了几个case,让我注意边界值,我测了机组,都没有问题啊。
往往这个时候,老码农同学就该操刀上场了。他的经典台词:姜是老的辣,看我的。
果然不服还是不行,他劈里啪啦测试了几组数据,就测出bug了。
题目的示例数据
BRUTMHYHIIZP
输出结果是
10000000000000000
他测试时输入
BRUTMHYHIIZQ
而输出结果,还是
10000000000000000
肯定是不对的,我扫了下代码,判断应该是pow
函数搞的鬼,那我就不用你了。
详细看后面的代码。
且看,pow函数的参数
pow(double _X, double _Y)
pow函数的输入和输出都是double,肯定是精度出问题了。此时,可以考虑用快速幂来解决精度问题
知识点
在另一个世界的AtCoder上举办的AtCoder Big Contest将一次性出现
问题。
问题的ID从第一个问题开始依次为A
,B
,…,Z
, AA
, AB
, ..., ZZ
, AAA
, ... 来定义自定义外观。
也就是说,ID是按照以下顺序附加的。
这个竞赛包含的问题的ID的字符串S被给予,请回答那个是第几个问题。
S
把答案作为整数输出。
AB
28
ID为AB
的问题是AtCoder Big Contest的第28个问题。
C
3
ID为C
的问题是AtCoder Big Contest的第三个问题。
BRUTMHYHIIZP
10000000000000000
ID为BRUTMHYHIIZP
的问题是AtCoder Big Contest的
问题,即最终问题。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
void best_coder() {
string s;
cin >> s;
unsigned long long ans = 0;
int j = 0;
for (int i = s.size() - 1; i >= 0; --i) {
long long p = 1;
for (int j = 0; j < i; ++j) {
p *= 26;
}
ans += (s[j] - 'A' + 1) * p;
++j;
}
cout << ans;
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
// 返回
return 0;
}
AC: 47 WA: 3
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
void best_coder() {
string s;
cin >> s;
long long ans = 0;
long long j = 0;
for (long long i = s.size() - 1; i >= 0; --i) {
ans += (s[j] - 'A' + 1) * pow(26, i);
++j;
}
cout << ans;
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
// 返回
return 0;
}