蒟蒻的代码:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
class InputStream
{
private:
/*临时缓冲*/
char buffer[10000];
char sign;
public:
InputStream()/*初始化*/
{
for(int index=0;index<=9999;index++)
{
buffer[index]=' ';
}
sign='+';
}
InputStream operator >>(int &variable)
{
int index=1;
while(buffer[index]=getchar(),buffer[index]!=' '&&buffer[index]!='\n')
{
if(buffer[index]=='-')
{
sign='-';
}
else if(buffer[index]=='+')
{
sign='+';
}
else
{
if(sign=='+')
{
variable*=10;
variable+=buffer[index]-'0';
}
else
{
variable*=10;
variable-=buffer[index]-'0';
}
}
index++;
}
buffer[index]='\0';
return *this;
}
InputStream operator >>(long &variable)
{
int index=1;
while(buffer[index]=getchar(),buffer[index]!=' '&&buffer[index]!='\n')
{
if(buffer[index]=='-')
{
sign='-';
}
else if(buffer[index]=='+')
{
sign='+';
}
else
{
if(sign=='+')
{
variable*=10;
variable+=buffer[index]-'0';
}
else
{
variable*=10;
variable-=buffer[index]-'0';
}
}
index++;
}
buffer[index]='\0';
return *this;
}
InputStream operator >>(short &variable)
{
int index=1;
while(buffer[index]=getchar(),buffer[index]!=' '&&buffer[index]!='\n')
{
if(buffer[index]=='-')
{
sign='-';
}
else if(buffer[index]=='+')
{
sign='+';
}
else
{
if(sign=='+')
{
variable*=10;
variable+=buffer[index]-'0';
}
else
{
variable*=10;
variable-=buffer[index]-'0';
}
}
index++;
}
buffer[index]='\0';
return *this;
}
InputStream operator >>(float &variable)
{
int index=1;
bool flag=true;
double byte=1;
while(buffer[index]=getchar(),buffer[index]!=' '&&buffer[index]!='\n')
{
if(buffer[index]=='-')
{
sign='-';
}
else if(buffer[index]=='+')
{
sign='+';
}
else if(buffer[index]=='.')
{
flag=false;
}
else
{
if(flag==true)
{
if(sign=='+')
{
variable*=10;
variable+=buffer[index]-'0';
}
else
{
variable*=10;
variable-=buffer[index]-'0';
}
}
else
{
if(sign=='+')
{
variable+=(buffer[index]-'0')*byte*0.1;
byte*=0.1;
}
else
{
variable*=10;
variable-=(buffer[index]-'0')*byte*0.1;
byte*=0.1;
}
}
}
index++;
}
buffer[index]='\0';
return *this;
}
InputStream operator >>(double &variable)
{
int index=1;
bool flag=true;
double byte=1;
while(buffer[index]=getchar(),buffer[index]!=' '&&buffer[index]!='\n')
{
if(buffer[index]=='-')
{
sign='-';
}
else if(buffer[index]=='+')
{
sign='+';
}
else if(buffer[index]=='.')
{
flag=false;
}
else
{
if(flag==true)
{
if(sign=='+')
{
variable*=10;
variable+=buffer[index]-'0';
}
else
{
variable*=10;
variable-=buffer[index]-'0';
}
}
else
{
if(sign=='+')
{
variable+=(buffer[index]-'0')*byte*0.1;
byte*=0.1;
}
else
{
variable*=10;
variable-=(buffer[index]-'0')*byte*0.1;
byte*=0.1;
}
}
}
index++;
}
buffer[index]='\0';
return *this;
}
InputStream operator >>(char &variable)
{
variable=getchar();
return *this;
}
}In;
class OutputStream
{
private:
int field;
char fillchar;
public:
OutputStream()/*初始化*/
{
field=0;
fillchar=32;
}
void Fill(int fill,char fillstr)
{
field=fill;
fillchar=fillstr;
}
void Normal()
{
field=0;
fillchar=32;
}
OutputStream operator <<(int variable)
{
int temporary=variable;
int len=0;
if(temporary<0)
{
putchar('-');
temporary=-temporary;
}
while(pow(10,len)<=temporary)
{
len++;
}
len--;
if(field<=0)
{
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
else
{
if(len>=field)
{
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
else
{
int temporaryfield=field-len-2;
while(temporaryfield>=0)
{
putchar(fillchar);
temporaryfield--;
}
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
}
return *this;
}
OutputStream operator <<(long variable)
{
int temporary=variable;
int len=0;
if(temporary<0)
{
putchar('-');
temporary=-temporary;
}
while(pow(10,len)<=temporary)
{
len++;
}
len--;
if(field<=0)
{
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
else
{
if(len>=field)
{
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
else
{
int temporaryfield=field-len-2;
while(temporaryfield>=0)
{
putchar(fillchar);
temporaryfield--;
}
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
}
return *this;
}
OutputStream operator <<(short variable)
{
int temporary=variable;
int len=0;
if(temporary<0)
{
putchar('-');
temporary=-temporary;
}
while(pow(10,len)<=temporary)
{
len++;
}
len--;
if(field<=0)
{
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
else
{
if(len>=field)
{
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
else
{
int temporaryfield=field-len-2;
while(temporaryfield>=0)
{
putchar(fillchar);
temporaryfield--;
}
if(temporary!=0)
{
while(temporary!=0)
{
int times=0;
while(temporary>=(int)pow(10,len))
{
temporary-=(int)pow(10,len);
times++;
}
putchar(times+'0');
len--;
}
while(len>=0)
{
putchar('0');
len--;
}
}
else
{
putchar('0');
}
}
}
return *this;
}
OutputStream operator <<(double variable)
{
if(variable<0)
{
putchar('-');
variable=-variable;
}
else
{
;
}
*this<<(int)floor(variable);
variable-=(variable);
putchar('.');
for(int i=1;i<=6;i++)
{
variable*=10;
putchar((int)(variable)+'0');
variable-=(int)(variable);
}
return *this;
}
}Out;
int main()
{
double s;
In>>s;
Out<<s;
}
运行后发现输出的double有问题.
[In:]-0.2
[Out:]-0.200000
[In:]-0.253
[Out:]-20.503000