今天做作业时遇到一道题。
一看,感觉很简单,只需要一个for,看看绝对值i % 2 是否 == 1,是的话直接输出i就行了。
代码:
#include <bits/stdc++.h>
using namespace std;
int a, b, t;
int main () {
cin >> a >> b;
for (int i = a; i <= b; i++)
if (abs(i) % 2 == 1)
t++;
cout << t << endl;
for (int i = a; i <= b; i++)
if (abs(i) % 2 == 1)
cout << i << endl;
return 0;
}(本代码仅适合GCC C++)
提交上去之后:
于是,我改用了scanf与printf。
#include <bits/stdc++.h>
using namespace std;
int a, b, t;
int main () {
scanf("%d%d", &a, &b);
for (int i = a; i <= b; i++)
if (abs(i) % 2 == 1)
t++;
printf("%d", t);
for (int i = a; i <= b; i++)
if (abs(i) % 2 == 1)
printf("%d", i);
return 0;
}
那么,为什么C的scanf&printf比cin&cout快呢?
首先,printf&scanf是C的,而C++为了兼容C,将cin&cout与scanf&printf捆绑在了一起。可以关掉C++对C的兼容。其次endl这个家伙绝对没有人不知道,他一直在刷新缓冲区,导致运行变慢,若使用'\n'换行,速度绝对比你想象中的要快。