2 aaakirito aaakirito 于 2018.02.11 17:35 提问

cin关闭同步后和scanf到底谁快
c c++

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都快

4个回答

caozhy
caozhy   Ds   Rxr 2018.02.11 17:56
已采纳

如果你非要探查一个究竟,你不妨可以在其它条件一样的情况下大量测试。
比如说用程序去实现输入,保持输入的速度一样,然后循环1000次,看谁快。
就是不同的操作系统,不同的环境,结果都未必一致,你也只能得到你当前环境下谁更好的结论。

aaakirito
aaakirito 好的,那也就是说主要是环境的影响
3 个月之前 回复
aaakirito
aaakirito   2018.02.11 18:06

图片说明

xxyyttxx
xxyyttxx   2018.03.06 00:17

我提一个新的角度出来吧:
cin的问题主要是对每一个变量都要调用一次操作符函数,而scanf不用。
但是scanf要解析格式串,但是解析复杂度是线性的。
如果你只有一个变量 比如 cin>>a[i] // scanf("%d", a+i) 这种应该是cin比较快吧,从这个角度。
如果你有很多东西 比如要scanf("%u-%u-%u-%u", &a, &b, &c, &d); 这种,应该是scanf快吧。

xxyyttxx
xxyyttxx 求C币,ps最后一行只用调用一次函数,剩下的都是看实现了。
3 个月之前 回复
caozhy
caozhy   Ds   Rxr 2018.02.11 17:54

这个问题很奇怪,因为scanf的速度从来都不会对程序的效率产生什么实质的影响。好比在火车上往车头方向走并不是提前到达目的地的有实际价值的方式。

aaakirito
aaakirito 我是一位ACMer,在我做题途中有些题数据非常的大,所以我还是比较在意cin关闭同步和scanf之间的速度,因为一个输入的不同会影响是否AC,scanf确实快,但有时会比关闭同步cin慢
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!