求助快写double
  • 板块灌水区
  • 楼主yangfengzhao
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/23 16:31
  • 上次更新2024/8/23 19:21:12
查看原帖
求助快写double
1049846
yangfengzhao楼主2024/8/23 16:31

蒟蒻的代码:

#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有问题.

数据1

[In:]-0.2 [Out:]-0.200000

数据2

[In:]-0.253 [Out:]-20.503000

2024/8/23 16:31
加载中...