c语言中cin和scanf的区别(速度)

127 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

既然要比速度,那就先给这两个函数编写一个比较复杂(不好计算)的程序,防止时间小于0.01。

请看代码(注:读者需要先创建一个名为gg的txt文件,在里面写数字):

scanf:

#include<stdio.h>
int main()
{
	freopen("gg.txt","r",stdin);
    const int MOd=1000000;
	int n,s=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int fac=1;
		for(int j=1;j<=i;j++)
		   fac=(fac*j%MOd);
		s=(s+fac)%MOd;   
	}
	printf("%d\n",s);
	return 0; 
}

(第一次用掘金不太熟悉,加代码这搞了半天)

cin: ​

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
	freopen("gg.txt","r",stdin);
    const int MOd=1000000;
	int n,s=0;
	cin >> n ;
	for(int i=1;i<=n;i++)
	{
		int fac=1;
		for(int j=1;j<=i;j++)
		   fac=(fac*j%MOd);
		s=(s+fac)%MOd;   
	}
	printf("%d\n",s);
	return 0; 
}

这是一个阶乘之和(1!+2!+...n!)取最后六位数的程序,接下来给它加一个“计时器”

新代码:

scanf: ​

#include<stdio.h>
#include<time.h>
int main()
{
	freopen("gg.txt","r",stdin);
    const int MOd=1000000;
	int n,s=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int fac=1;
		for(int j=1;j<=i;j++)
		   fac=(fac*j%MOd);
		s=(s+fac)%MOd;   
	}
	printf("%d\n",s);
	printf("Time used=%.2f",(double)clock()/CLOCKS_PER_SEC); 
	return 0; 
}

cin: ​

#include<stdio.h>
#include<time.h>
#include<iostream>
using namespace std;
int main()
{
	freopen("gg.txt","r",stdin);
    const int MOd=1000000;
	int n,s=0;
	cin >> n ;
	for(int i=1;i<=n;i++)
	{
		int fac=1;
		for(int j=1;j<=i;j++)
		   fac=(fac*j%MOd);
		s=(s+fac)%MOd;   
	}
	printf("%d\n",s);
	printf("Time used=%.2f",(double)clock()/CLOCKS_PER_SEC);	
	return 0; 
}

好的,代码就是这个样子,时间单位为秒。接下来让我们运行一下看看(都输入12800)。

scanf: ​ cin: ​ 因为这是测试嘛,所以难免有误差,可以多试几次,接下来试一试25600.

scanf: ​ cin: ​ 经过两轮测试(作者做过很多次测试,读者可以自行测试),我们得出结果:scanf比cin慢。其实对于这个结果作者也有些许疑问,不过事实也摆在眼前不得不承认cin更快些。