编程注意点
C/C++
全局数组。
当我们试图在函数中开一个大数组时,很容易使程序报错退出,这是因为在函数(包括主函数)中定义变量时,变量会存放在“栈”区,栈区可以分配的内存较小,所以在开大数组的时候会因为申请不到内存而报错退出。而如果我们把数组开在函数外面,那么将会存放在“堆”区,堆区可以分配的内存较大,适合开大数组。
#include <stdio.h> const int MAXN = 1000010; int a[MAXN]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } for (int i = 0; i < n; i++) { printf("%d", a[i]); if (i < n - 1) { printf(" "); } } return 0; }
比较很小的两个浮点数时,不能直接比较
要相减后和EPS比较,以保证精度
因为double类型或float类型都是有精度的,其实都是取的近似值,所以有个误差。和一个很小的数比如0.00000001 (1e-8)比较就是为了在这个误差范围内进行比较。 (blog.csdn.net) 举个例子如double b = 0.123456可能是0.1234561的四舍五入后得到的结果。最后的0.0000001就表示误差范围了。 (blog.csdn.net)
如果不加这个误差范围,可能会出现一些不可预知的错误,比如两个数明明相等,但是却因为精度问题而无法判断相等。 (blog.csdn.net)
在这段代码中,result1和result2都是double类型的变量,而double类型的变量有精度限制。因此,为了在这个误差范围内进行比较,需要和一个很小的数比如0.00000001 (1e-8)比较大小。 (blog.csdn.net)
#include<iostream>
#include<math.h>
#define EPS 1e-8
using namespace std;
int main() {
double a, b, c, d;
cin >> a >> b >> c >> d;
if (a * asin(sqrt(b) / 2) - c * asin(sqrt(d) / 2)>EPS)
cout << "1";
else if (a * asin(sqrt(b) / 2) - c * asin(sqrt(d) / 2)<-EPS)
cout << "2";
else cout << "0";
return 0;
}
不知道有多少输入时可以用 while (scanf("%d%d", &a, &b) != EOF)
#include <cstdio> int main() { int a, b; while (scanf("%d%d", &a, &b) != EOF) { printf("%d\n", a + b); } return 0; }