怎么做快读快写?
这是本蒻的代码:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
enum RunTimeError{}RTE;
int ReadInt(char Sign='+',int Num=0)
{
char Temp=getchar();
if(Temp=='-')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
if(Num==0)
{
ReadInt('-',0);
}
else
{
throw(RTE);
}
}
}
else if(Temp=='+')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
ReadInt('+',Num);
}
}
else if(Temp>=48&&Temp<=57)
{
if(Sign=='-')
{
ReadInt('-',Num*10-(Temp-48));
}
else
{
ReadInt('+',Num*10+(Temp-48));
}
}
else
{
return Num;
}
}
long long ReadLong(char Sign='+',long long Num=0)
{
char Temp=getchar();
if(Temp=='-')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
if(Num==0)
{
ReadLong('-',0);
}
else
{
throw(RTE);
}
}
}
else if(Temp=='+')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
ReadLong('+',Num);
}
}
else if(Temp>=48&&Temp<=57)
{
if(Sign=='-')
{
ReadLong('-',Num*10-(Temp-48));
}
else
{
ReadLong('+',Num*10+(Temp-48));
}
}
else
{
return Num;
}
}
short ReadShort(char Sign='+',short Num=0)
{
char Temp=getchar();
if(Temp=='-')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
if(Num==0)
{
ReadShort('-',0);
}
else
{
throw(RTE);
}
}
}
else if(Temp=='+')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
ReadShort('+',Num);
}
}
else if(Temp>=48&&Temp<=57)
{
if(Sign=='-')
{
ReadShort('-',Num*10-(Temp-48));
}
else
{
ReadShort('+',Num*10+(Temp-48));
}
}
else
{
return Num;
}
}
char ReadChar()
{
return getchar();
}
bool ReadBool(char Compare=' ')
{
char Temp;
Temp=getchar();
if(Compare!=' ')
{
if(Temp==Compare)
{
return true;
}
else
{
return false;
}
}
else
{
if(Temp=='F'||Temp=='0')
{
return false;
}
else
{
return true;
}
}
}
double ReadDouble(char Sign='+',double Num=0.0,int byte=0.1)
{
char Temp;
Temp=getchar();
if(Temp=='+')
{
ReadDouble('+',0.0,0);
}
else if(Temp=='-')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
ReadDouble('-',0.0,0);
}
}
else if(Temp=='.')
{
ReadDouble(Sign,Num,-1);
}
else if(Temp>=48&&Temp<=57)
{
if(byte==0)
{
ReadDouble(Sign,Num*10+(Temp-48),0);
}
else
{
ReadDouble(Sign,Num+(Temp-48)*pow(10,byte),byte-1);
}
}
else
{
;
}
}
float ReadFloat(char Sign='+',float Num=0.0,int byte=0.1)
{
char Temp;
Temp=getchar();
if(Temp=='+')
{
ReadFloat('+',0.0,0);
}
else if(Temp=='-')
{
if(Sign=='-')
{
throw(RTE);
}
else
{
ReadFloat('-',0.0,0);
}
}
else if(Temp=='.')
{
ReadFloat(Sign,Num,-1);
}
else if(Temp>=48&&Temp<=57)
{
if(byte==0)
{
ReadFloat(Sign,Num*10+(Temp-48),0);
}
else
{
ReadFloat(Sign,Num+(Temp-48)*pow(10,byte),byte-1);
}
}
else
{
;
}
}
void WriteInt(int Num)
{
if(Num<0)
{
putchar('-');
WriteInt(Num*-1);
}
else if(Num==0)
{
return ;
}
else
{
WriteInt(Num/10);
putchar(Num%10+48);
}
return ;
}
void WriteChar(char Str)
{
putchar(Str);
}
void WriteDouble(double Num)
{
if(Num<0.0)
{
putchar('-');
WriteDouble(-1.0*Num);
}
else
{
WriteInt(Num);
double Temp=Num-floor(Num);
while(Temp-floor(Temp)!=0.0)
{
Temp*=10;
}
putchar('.');
WriteInt(Temp);
}
}
void WriteFloat(float Num)
{
if(Num<0.0)
{
putchar('-');
WriteFloat(-1.0*Num);
}
else
{
WriteInt(Num);
double Temp=Num-floor(Num);
while(Temp-floor(Temp)!=0.0)
{
Temp*=10;
}
putchar('.');
WriteInt(Temp);
}
}
int main()
{
return 0;
}
在WriteInt函数中,0无法被打印,打印0又会使其他数字最高位是0;
在WriteDouble函数中,本蒻使用了两次WriteInt函数,如果浮点数的个位是0,那就不会被打印出来.