scanf和cin的区别

今天刷题,在线提交,很简单的一个找规律题。

题目见: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[n]%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的效率就很低了,但是保证了安全。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值