既然要比速度,那就先给这两个函数编写一个比较复杂(不好计算)的程序,防止时间小于0.01。
请看代码:
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慢。