cin关闭同步后和scanf到底谁快,有时cin快,有时scanf快,请问各位大牛能否解释说明一下
#include
#include
#include
const double pi=acos(-1);
typedef unsigned long long ull;
using namespace std;
int main() {
int t;
scanf("%d",&t);
//ios::sync_with_stdio(false);
//cin>>t;
while (t--) {
ull n,x=1;
scanf("%llu",&n);
//cin>>n;
if(n>1)
x=ull(log(sqrt(2*pi*n))/log(8)+n*log(n/exp(1))/log(8)+1);
printf("%llu\n",x);
}
return 0;
}
这里就是关闭同步也超时,但有时用关闭同步的cin打表速度比scanf都快
如果你非要探查一个究竟,你不妨可以在其它条件一样的情况下大量测试。
比如说用程序去实现输入,保持输入的速度一样,然后循环1000次,看谁快。
就是不同的操作系统,不同的环境,结果都未必一致,你也只能得到你当前环境下谁更好的结论。
我提一个新的角度出来吧:
cin的问题主要是对每一个变量都要调用一次操作符函数,而scanf不用。
但是scanf要解析格式串,但是解析复杂度是线性的。
如果你只有一个变量 比如 cin>>a[i] // scanf("%d", a+i) 这种应该是cin比较快吧,从这个角度。
如果你有很多东西 比如要scanf("%u-%u-%u-%u", &a, &b, &c, &d);
这种,应该是scanf快吧。
在100000的情况下,关闭同步的cin比scanf慢0.5s左右,(不是我测试的,我老师告诉我的)
这个问题很奇怪,因为scanf的速度从来都不会对程序的效率产生什么实质的影响。好比在火车上往车头方向走并不是提前到达目的地的有实际价值的方式。