本来没有打算再玩博客的,可是后来想想还是继续写博客,毕竟就这样闲置了有点可惜。那么言归正传,这篇博客就写点关于数据输入输出的优化好了。
输入的优化有个前提,那就是数据很大,首先最基础的就是不用cin、cout,用scanf、printf,如果时间效率还是感觉不够高,那就应该把数字转化成字符,逐字符的输出,这样时间可以缩短,至于能优化到什么程度,貌似可以到原来的三分之一。还要罗嗦一句,在确认输入输出占用了很多时间以后才应该用读入优化,平时不要盲目使用,因为修改后的读入对数据的处理能力有限。言归正传,上代码吧。
输入的优化有个前提,那就是数据很大,首先最基础的就是不用cin、cout,用scanf、printf,如果时间效率还是感觉不够高,那就应该把数字转化成字符,逐字符的输出,这样时间可以缩短,至于能优化到什么程度,貌似可以到原来的三分之一。还要罗嗦一句,在确认输入输出占用了很多时间以后才应该用读入优化,平时不要盲目使用,因为修改后的读入对数据的处理能力有限。言归正传,上代码吧。
int readint() //处理对非负整数的输入然后主程序可以这样用readint
{
char ch = getchar();
while(!isdigit(ch))ch = getchar(); //过滤掉非数字,比如空格什么的
int re = 0;
while(isdigit(ch))
{
re = re * 10 + ch-'0';
ch = getchar();
}
return re;
}
int main()上面的程序只能处理非负整数,因为除了数字其他的所有字符全被过滤掉了,下面是另外一个版本:
{
int num[100];
int tot = readint();
for(int i = 0; i < 10; i ++)
{
num[i] = readint();
}
return 0;
}
总之,要根据题目意思写出readint()。接下来还有一个输出优化,同样的,是把数字转化成字符输出。int readint()
{
int res = 0;
bool flag = false;
scanf("%s", str);
for(int i=0;str[i];++i)
{
if(str[i] == '-') flag = true;
else if(str[i] == '.') continue;
else
{
res = res * 10 + str[i] - '0';
}
}
if(flag) res = - res;
return res;
}
void writeint(int i)
{
char miaolegemi[10];
int pos = 0;
if(i == 0)pos ++; //如果要输出的是“零”。。。
else while(i)
{
miaolegemi[pos++] = i % 10;
i /= 10;
}
for(int i = pos-1;i >= 0; i --)
putchar(miaolegemi[i] + '0');
putchar('\n'); // 输出的格式要按照题目来
}