论整数输出优化
来源:互联网 发布:sis最新域名 编辑:程序博客网 时间:2024/06/05 02:07
背景
前些天,看到有些大牛写了输出优化,于是乎,我就想比较一下输出优化和printf、cout的速度,想证明输出优化是否有所用处。
于是,想起ctime头文件和clock函数可以测试程序在运行期间花费的时间,于是就有了灵感,写出了一个测试程序。
搜集资料
网上有两种输出优化程序,分别是:
要用数组的。
int buf[30];void putint_array(int x){ if(x<0) putchar('-'),x=-x; buf[0]=0; while(x) buf[++buf[0]]=x%10,x/=10; if(!buf[0]) buf[0]=1,buf[1]=0; while(buf[0]) putchar('0'+buf[buf[0]--]);}
一般的。
void putint_usual(int p){ if(p<0)putchar('-'),p=-p; if(p>9)printf("%d",p/10); putchar(p%10+'0');}
有一天构思出了一种递归输出方法。
void putint_recursion(int p){ if(p<0)putchar('-'),p=-p; if(p>9)putint_recursion(p/10); putchar(p%10+'0');}
另外,C++还有printf和cout。
程序
write和putint函数是两种输出优化函数,然后以下是测试程序。
#include<windows.h>#include<iostream>#include<cstdio>#include<ctime>using namespace std;int buf[30];const int Test=1000000;inline void putint_array(int x)//输出优化一,要用数组{ if(x<0) putchar('-'),x=-x; buf[0]=0; while(x) buf[++buf[0]]=x%10,x/=10; if(!buf[0]) buf[0]=1,buf[1]=0; while(buf[0]) putchar('0'+buf[buf[0]--]);}inline void putint_usual(int p){//输出优化二,平常算法 if(p<0)putchar('-'),p=-p; if(p>9)printf("%d",p/10); putchar(p%10+'0');}inline void putint_recursion(int p)//输出优化三,递归算法{ if(p<0)putchar('-'),p=-p; if(p>9)putint_recursion(p/10); putchar(p%10+'0');}int main()//测试{ freopen("Test.out","w",stdout); double A[5]; //测试printf double t1=clock(); for(int i=1;i<=Test;i++) printf("%d",i); double t2=clock(); A[0]=(t2-t1)/1000; //测试cout t1=clock(); for(int i=1;i<=Test;i++) cout<<i; t2=clock(); A[1]=(t2-t1)/1000; //测试putint_usual t1=clock(); for(int i=1;i<=Test;i++) putint_usual(i); t2=clock(); A[2]=(t2-t1)/1000; //测试putint_array t1=clock(); for(int i=1;i<=Test;i++) putint_array(i); t2=clock(); A[3]=(t2-t1)/1000; //测试putint_recursion t1=clock(); for(int i=1;i<=Test;i++) putint_recursion(i); t2=clock(); A[4]=(t2-t1)/1000; //输出结果 fclose(stdout); freopen("Answer.out","w",stdout); printf("When number is %d,\n",Test); printf("printf took %.3lf second(s)\n",A[0]); printf("cout took %.3lf second(s)\n",A[1]); printf("putint_usual took %.3lf second(s)\n",A[2]); printf("putint_array took %.3lf second(s)\n",A[3]); printf("putint_recursion took %.3lf second(s)\n",A[4]);}
注:
- clock()的作用为获取当前的时间,两时间差即函数花费的时间。
- system(“cls”)的作用为清屏,要用windows.h头文件,且只能在windows操作系统下使用。
- Test的值可以改变,意义为测试的数量。
- 为了公平起见,四个函数都inline,变成自带函数。
- 运用物理思想:多次实验获取普遍规律。
测试结果
When number is 10000000,
printf took 2.984 second(s)
cout took 2.203 second(s)
putint_usual took 2.875 second(s)
putint_array took 1.422 second(s)
putint_recursion took 2.172 second(s)
cena
让我大吃一惊的是cout竟然比printf还快,后面实验发现cout擅长的是小数据的输出,不能输出大数据。
结论
所以,以后我们还是用printf自带函数或者数组输出优化(如果你愿意)。如果要写,也可以装一下逼。以上就是我的个人观点,仅供参考。
以下文章可能对你有所参考:
http://blog.csdn.net/c20182030/article/details/69388906
0 0
- 论整数输出优化
- 论整数输入优化
- 输出整数
- 【优化2】整数优化
- 整数的标准输出
- 逆序输出整数
- MFC输出整数值
- MessageBox输出整数
- 整数二进制输出
- 整数按位输出
- 整数的逆序输出
- 逆序输出一个整数
- 将整数逆序输出
- 二进制输出整数
- 升序输出三个整数
- 整数划分,输出
- 将整数翻转输出
- 整数逆序输出
- linux下top命令如何查看内存及多核CPU的方法
- 【剑指offer】不用加减乘除做加法
- sublime简要笔记
- ssh解析
- 正则表达式(手机号、身份证号)
- 论整数输出优化
- C++拷贝构造函数详解
- 设置横竖屏不走生命周期后,监听横竖屏的方法
- 多传感器数据融合算法综述
- iOS语言本地化/国际化宝典
- SSO单点登录系列5:cas单点登录增加验证码功能完整步骤
- 微信浏览器安卓手机video浮在最上层问题
- 常用排序算法稳定性、时间复杂度分析
- 枚举