快速读入(包括int,string ,double)以及快速读出的模板
作者:
lgd123
,
2021-10-16 17:42:48
,
所有人可见
,
阅读 232
//int
inline int read()
{
int X=0; bool flag=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
if(flag) return X;
return ~(X-1);
}
//string
inline string StringRead()
{
string str;
char s = getchar();
//处理多余回车或空格
while (s == ' ' || s == '\n' || s == '\r')
{
s = getchar();
}
//不断读入直到遇到回车或空格
while (s != ' ' && s != '\n' && s != '\r')
{
str += s;
s = getchar();
}
return str;
}
//double
inline double DoubleRead()
{
//double的值可能很大,所以开long long
long long s = 0, w = 1, k = 0, n = 0, m = 0;
char ch = getchar();
//和int一毛一样有木有
while(ch < '0' || ch > '9')
{
if(ch == '-') w = -1;
ch = getchar();
}
while((ch >= '0' && ch <= '9') || ch == '.')
{
//n = 0代表读入整数,= 1代表读入小数
if (ch == '.')
n = 1;
else if (n == 0)
s = s * 10 + ch - '0';
else k = k * 10 + ch - '0', m++;
ch = getchar();
}
return (pow(0.1, m) * k + s) * w;
}
----------
快速读出
//int
inline void IntWrite (int s)
{
int k = 0, len = 0;
if (s == 0)
putchar('0');
while (s)
{
k = k * 10 + s % 10;
s /= 10, len++;
}
for (int i = 0;i < len;i++)
{
putchar(k % 10 + '0');
k /= 10;
}
}
//string
inline void StringWrite(std::string str)
{
int i = 0;
while (str[i] != '\0')
{
putchar(str[i]), i++;
}
}
// double
inline void DoubleWrite(double a)
{
int mi = 0, s[100];
if (a == 0)
putchar('0');
while (a != (long long int)a)
{
a *= 10, mi++;
}
long long int k = a, len = 0;
while (k != 0)
{
s[len] = k % 10, len++, k /= 10;
}
for (len -= 1;len >= 0;len--)
{
if (len == mi - 1)
putchar('.');
putchar(s[len] + '0');
}
}
以上是本人搬运博客园大佬的博客,放到这儿只是为了方便使用。
下面附上大佬博客链接
[大佬链接](https://www.cnblogs.com/TheAzureDeepSpace/p/13476525.html)
我到时候也搞个hhh但是……
# 我有一题用了快读居然比scanf还慢
# 这是什么道理……
也许是数据量比较小吧,我也不清楚,如果有答案,请踹我一脚,我也想知道
我在问答栏提了……在线等大佬