C和C ++中执行时间的差异

时间:2014-03-06 13:01:01

标签: c++ c executiontimeout

我最近发现这个名为codechef的网站,您可以在其中提交问题解决方案。 我已经为一个问题提交了两个答案,一个在C中,另一个在C ++中。两个代码几乎相同。但是当我在C中提交的代码在4.89s中执行时,我在C ++中提交的代码超时(超过8秒)。这怎么可能?时间到了哪里?

问题是:

  

输入

     

输入以两个正整数n k(n,k <= 107)开始。接下来的n行输入包含一个正整数ti,每个不大于10 ^ 9。

     

输出

     

写一个整数到输出,表示有多少整数ti可被k整除。

Example

Input:
7 3
1
51
966369
7
9
999996
11

Output:
4

我的代码在C:

 #include<stdio.h>

 int main()  {

   int n,k,t;
   scanf("%d %d",&n,&k);
   int i,num=0;
   for(i=0;i<n;i++)  {
     scanf("%d",&t);
     if(t%k==0)  num++;
   }     

   printf("%d",num);

   return 0;
 }

我在C ++中的代码:

 #include<iostream>

 using namespace std;

 int main()  {

   int n, k, t,num=0;
   cin>>n>>k;
   for(int i=0;i<n;i++)  {
     cin>>t;
     if(t%k==0)  num++;
   }

   cout<<num;
   return 0;
 } 

2 个答案:

答案 0 :(得分:28)

即使他们做同样的事情,代码也不是真的相同

c ++版本使用cin和stream,默认情况下比scanf等慢。

默认情况下,cin / cout浪费时间与C库的stdio缓冲区同步,这样你就可以自由地将对scanf / printf的调用与cin / cout上的操作混合。您可以使用std::ios_base::sync_with_stdio(false);

关闭此功能

通过这样做,所花费的时间或多或少与我期望的相似

答案 1 :(得分:1)

我通常在main()之后添加这三行代码,以加快输入输出速度:

ios_base::sync_with_stdio(false);

cin.tie(NULL);

cout.tie(NULL);

所以,尝试这个:

int main()  
{
   ios_base::sync_with_stdio(false);
   cin.tie(NULL);
   cout.tie(NULL);
   int n, k, t,num=0;
   cin>>n>>k;
   for(int i=0;i<n;i++)  {
     cin>>t;
     if(t%k==0)  num++;
   }

   cout<<num;
   return 0;
 }