1.cin读入一行数据
char str[100];
cin.getline(str,100);
string str;
getline(cin,str);
2.cout控制double型数据精度
添加头文件 “iomanip”
double a = 3.1415926;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<endl;
3.浮点数的比较!!!
1.相等判断
浮点数在计算机中存储并不总是精确的,如3.14,在存储可能是3.1399999或3.14000001,但是 "=="是完全相等才会是true,于是引入一个极小量eps对误差进行修正
一个数a落在[b-eps.b+eps]范围内,就说a==b,一般eps取 10^(-8)比较合适
const double eps = 1e-8;
或者使用宏定义方式
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
实例
#include<stdio.h>
#include<math.h>
const double eps = 1e-8;
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
int main(){
double db = 1.23;
if(Equ(db,1.23)){ //在这里 db == 1.23 也是可以的
printf("true");
}else{
printf("false");
}
return 0;
}
一般没有没经过容易损失精度的计算,直接判断都行,但是经过容易损失精度的计算,就不行了,比如下面这个
double db1 = 4 * asin(sqrt(2.0) / 2);
double db2 = 4 * asin(sqrt(3.0) / 2);
if(db1 == db2){
printf("true");
}else{
printf("false");
}
显然这就是误差较大的运算,受到了误差的影响
2.大于
#define More(a,b) (((a) - (b))>(eps))
3.小于
#define Less(a,b) (((a) - (b))<(-eps))
4.大于等于
#define MoreEqu(a,b) (((a) - (b))>(-eps))
5.小于等于
#define More(a,b) (((a) - (b))<(eps))
6.圆周率π
cos(π) = -1
const double Pi = acos(-1.0);
4.时间复杂度 空间复杂度 编码复杂度
一般空间够用,考虑用空间换时间的策略编写代码