求助
  • 板块学术版
  • 楼主yangfengzhao
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/13 09:54
  • 上次更新2024/8/13 11:44:52
查看原帖
求助
1049846
yangfengzhao楼主2024/8/13 09:54

主题:快读快写

怎么做快读快写?

这是本蒻的代码:

#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;
}

问题1

在WriteInt函数中,0无法被打印,打印0又会使其他数字最高位是0;

问题2

在WriteDouble函数中,本蒻使用了两次WriteInt函数,如果浮点数的个位是0,那就不会被打印出来.

2024/8/13 09:54
加载中...