您的位置:首页 > 其它

scanf和cin的区别

2016-06-15 16:41 393 查看
今天刷题,在线提交,很简单的一个找规律题。

题目见:http://www.nowcoder.com/pat/2/problem/250

于是很快写出了代码:

int main(void)
{
int F[MAX];
F[0]=7;F[1]=11;
int n;
while(cin>>n)
{
for(int i=2;i<=n;i++)
F[i]=F[i-1]+F[i-2];
if(F
%3==0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}

提交上去,发现是超时的,郁闷,递归是很简单但是又很低效的一种做法。于是就去找规律。写了几个数发现如果(n%4==2)的话,就可以被3整除,反之,则不可以,于是又写出代码:
int main(void)
{
int n;
while(cin>>n)
{
if(n%4==2)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}结果还是超时,郁闷,看到讨论区有人说换成scanf就可以了,于是换成scanf.;
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n%4==2)
printf("Yes");
else
printf("No");
printf("\n");
}

return 0;
}
这样就提交通过了,根本区别就在于scanf和cin的区别。
它们的区别是什么呢:

数据量大时scanf效率高,因为scanf是格式化输入是实时的,而cin是字符流输入,需要先存入缓冲区再输入,scanf需要自己写格式,是一种格式化输入,scanf是用指针操作的,没有类型安全机制,比如一个char类型数据你就可以用%f获得输入,而不会报错,但在运行时会出现异常。cin是自动判断你的变量类型,比如一个char数据只能用默认的char方法取数据。
cin通过缓冲区输入,即输入首先存入缓冲区,等到缓冲区满时再自动刷新,这样cin的效率就很低了,但是保证了安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: