持续创作,加速成长!这是我参与「掘金日新计划 · 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更快些。