比较两个具有相同逻辑的源代码

Comparing 2 source codes with same logic

本文关键字:源代码 两个 比较      更新时间:2023-10-16

这是我在hackerearth上的"Life, the Universe, and Everything"的代码

为什么"我的解决方案"比"最佳解决方案"慢,即使逻辑用的是一样的!

事实上,我认为我的逻辑应该更快,因为我在n!=42时打印了答案,但"最佳解决方案"必须首先检查n==42,然后在数组中插入元素(执行'else'部分)。

请告诉我为什么"最佳解决方案"更快。

my solution :-
#include <iostream>
using namespace std;
int main()
{
  int n;
  while(1)
  {
     scanf("%d",&n);
     if(n!=42)
     {
        printf("%dn",n);
     }
     else
        break;
  }
  return 0;
}
Time Taken: 1.010669 seconds
---------------------------------------------------------
best solution:-
#include <iostream>
using namespace std;
int main()
{
  int n,a[10001],i=0,j;
  while(1)
  {
    cin>>n;
    if(n==42)
    break;
    else
    a[i++]=n;
  }
  for(j=0;j<i;j++)
  cout<<a[j]<<endl;
  return 0;
}
Time Taken: 1.004222 seconds

scanf和printf在处理方面是非常昂贵的函数。它们必须解释格式字符串(在您写"%d"的地方可能有各种各样复杂的格式占位符)。当这个单独完成的时候,另一个解可能已经完成了它的处理。scanf函数的源代码可能有几百行代码,printf也是。

另一方面,在最佳解决方案中,编译器已经知道预期的类型,并且必须在运行时处理更少的计算,因此从输入字符串到整数的转换以及从输入字符串到整数的转换要有效得多。

还没有测试过,但是您的输出包括两倍于控制台的输出。

每打印一个数字"最佳解决方案",你也加一个n
更多的字符=更多的时间来处理标准输出缓冲区