输入输出加速,就是用一位一位的读取或输出的方法达到加速的效果。
下面介绍对整数的输入输出加速:
输入:
输入正数:(要包含cctype库)
void scan(int &sca){
char ch=getchar();
while(!isdigit(ch))ch=getchar();
sca=0;
while(isdigit(ch)) sca=sca*10+ch-'0',ch=getchar();
}
输入可正可负数:
void scan(int &sca){
bool flag=false;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-'){
flag=true;
ch=getchar();
break;
}
else ch=getchar();
}
sca=0;
while(isdigit(ch)) sca=sca*10+ch-'0',ch=getchar();
if(flag) sca=-sca;
}
输出:
输出正数(包括0):
int out[15];//声明为全局变量,更快一些
void print(int pnt){
int p=0;
if(pnt==0) {putchar('0');return;}
else while(pnt){
out[p++]=pnt%10;pnt/=10;
}
for(int j=p-1;j>=0;j--) putchar('0'+out[j]);
}
输出正负数皆可:
int out[15];
void print(int pnt){
if(pnt<0) putchar('-'),pnt=-pnt;
int p=0;
if(pnt==0) {putchar('0');return;}
else while(pnt){
out[p++]=pnt%10;pnt/=10;
}
for(int j=p-1;j>=0;j--) putchar('0'+out[j]);
}
是时候更新一下了:模板版(适用于非负整数)
char in_c;
template<typename T>
void scan(T &in_n){
for(in_c=getchar();in_c<'0'||in_c>'9';in_c=getchar());
for(in_n=0;in_c>='0'&&in_c<='9';in_c=getchar()) in_n=in_n*10+in_c-'0';
}
char out_c[25];
int sz_out_c;
template<typename T>
void print(T out_n){
sz_out_c=0;
if(!out_n) out_c[sz_out_c++]='0';
while(out_n) out_c[sz_out_c++]=out_n%10+'0',out_n/=10;
while(sz_out_c--) putchar(out_c[sz_out_c]);
}
附:
输入输出测试(因电脑不同,速度也会不同)平均速度:
scanf:
输入1-10000: 0.011s
输入1-100000: 0.07s
输入:1-1000000: 0.75s
scan(正数版):
1-100000: 0.04s
1-1000000: 0.25s
printf:
输出1-100000: 0.25s
输出1-1000000: 2.4s
print(正数版):
输出1-100000: 0.04s
输出1-1000000: 0.25s