快读快写

long long read(){
	long long x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void write(long long x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}

快读

首先读入一个数字,我们需要他具体的值 xx,和其符号 ff(正负)。

int x=0,f=1;

为了实现快读的,我们需要用超快的 getchar()\text{getchar()}

char ch=getchar();

然而读入的过程中可能有许多多余的字符,如 \n,\0,a 等等,为了过滤掉他们,我们使用一个库函数 isdigit(ch)\text{isdigit}(ch)

isdigit(ch)\text{isdigit}(ch):若参数 chch 为阿拉伯数字 0099,则返回非 00 值,否则返回 NULL\text{NULL}

也就是相当于 c0 and c9c≥'0'\ and\ c≤'9'

在读入的过程中记录符号,最后把数字与符号相乘即可。

long long read(){
	long long x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

快写

如果 xx 是负数,输出 - 号,并改成正数。

if(x<0) putchar('-'),x=-x;

如果 xx 是两位数,先输出它的前几位,用递归实现。

if(x>9) write(x/10);

最后输出各位。

void write(long long x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}

back

posted @ 2021-08-05 00:07  luckydrawbox  阅读(7)  评论(0)    收藏  举报  来源