我猜getchar 是你的瓶颈。您可以尝试一次阅读更大的块:
#include <cstdio>
#include <cctype>
#define BUFFER 2048
#define OFFSET ('A' - 1)
#define MODULUS 26
using namespace std;
int main()
{
char buffer[BUFFER];
int count, done = 0, multiply = 1;
while (!done && (count = fread(buffer, sizeof(char), BUFFER, stdin)))
{
for (int i = 0; i < count; i++)
{
if (isupper(buffer[i]))
{
multiply *= (buffer[i] - OFFSET);
multiply %= MODULUS;
}
else
{
done = 1;
break;
}
}
}
printf("%02d\n", multiply);
return 0;
}
还修复了printf 并删除了幻数。它适用于测试用例。
需要注意的是,如果你在模数运算后得到的结果为零,那么继续下去就没有意义了,因为之后你的乘积总是为零,所以你可以在那里做一个捷径:
#include <cstdio>
#include <cctype>
#define BUFFER 2048
#define OFFSET ('A' - 1)
#define MODULUS 26
using namespace std;
int main()
{
char buffer[BUFFER];
int count, done = 0, multiply = 1;
while (!done && multiply && (count = fread(buffer, sizeof(char), BUFFER, stdin)))
{
for (int i = 0; multiply && i < count; i++)
{
if (isupper(buffer[i]))
{
multiply *= (buffer[i] - OFFSET);
multiply %= MODULUS;
}
else
{
done = 1;
break;
}
}
}
printf("%02d\n", multiply);
return 0;
}
分块阅读和快捷方式优化可能是您打破时间限制所需要的。