我的猜测是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;
}
阅读块和快捷方式优化可能是你需要超过时间限制。
我做了更正,并将其更改为unsigned int,但我仍然超出了时间限制。我不知道这是否真的是速度,或者是否让我上传程序时导致程序冻结。 –
我想你可以摆脱'iostream'包括? iiuc有一些静态初始化的东西,当你包含这个头文件时会被添加到你的程序中。但在这里应该是非常小的...什么时间限制? –
为什么你读到“\ n”?你确定他们给你的输入是“\ n”吗?我没有在声明中看到。我想它说第一行...嗯... –