关于输入输出,相信每个人都会(废话
在我们平常写代码时,通常会用 cin,cout 和 scanf,printf来进行输入输出(又是废话
可是,cin,cout的速度在通常情况下是慢于 scanf,printf的.....
可为什么要使用输入输出???
当你考虑不出正解的时候要写暴力,并且暴力会占据大多数时间,为了不超时,你必须控制程序中干其它事情的时间;或者说此题的输入很变态,有很多个数据,输入优化可以省时....
读入/输出优化的原理是利用了getchar() / putchar()这两个函数的速度较快,然后对应每一位处理。
具体优化看下面代码:
1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 /*inline*/int readint()//自定义有返回值的函数,进行读入优化,此处可以使用inline进行内联,有好处没坏处 7 { 8 char c=' '; 9 //关于字符c可以进行任何赋值,只要值不为数字或字符数即可,因为下面c数组肯定进行改变 ,但要让它首先进入第一个while循环中 10 int flag = 1; 11 while (c <'0' || c>'9'){ 12 //判断c是否在0至9之间,不在则继续输入 13 if (c == '-') flag = -1;//处理负数 14 c=getchar(); 15 }//继续输入 16 int num=0;//将x初始化,后面用x存输入数据 17 while (c>='0' && c<='9')//当c在0至9之间 18 { 19 x=x*10+c-'0';//此语句可以将其个位数字空出,+c-'0'可以得到一个真正意义上的数字,并将其加进去 20 c=getchar();//继续输入 21 } 22 return x;//每次只读入一个数据,当执行到15行再执行12行时发现条件不符时,说明本数据已读入完,并将其返回到主函数 23 } 24 25 int main() 26 { 27 int x; 28 for (int a=1;a<=10000000;a++)//for循环用来控制优化读入的个数 29 x=readint(); 30 }
可能很少人会讲输出优化,因为c++中每个输出都比较快,都不会占用太多时间,并且输出的数据数量一般较小,但是还是在这里讲一下吧
因为你写上从来不吃亏......
输出优化见代码:
1 void put_num(int i) { //先处理负数 2 if (i < 0) putchar('-'), i = -i; 3 if (i > 9) put_num(i / 10); 4 putchar(i % 10 + '0'); //大于9才递归 5 } //不要忘记加上'0'