unsigned long long与long double与向上/下取整与精度控制与小数位控制

(如有错误,望留言指正,感谢!)

unsigned long long:

范围:0~2^64-1 = 1844674407370955161;

输入输出:

unsigned long long a,b,c;
scanf("%llu",&a);
printf("%llu\n", a);
cin>>b;
cout<<b<<"\n";
scanf("%I64u",&c);
printf("%I64u\n",c );

有的OJ要用%I64u使用uLL,用%I64d使用LL,比如codeforces等。

Microsoft Visual C++ 6.0 :要用 %I64u

Win系统:可以用 %llu

Linux系统:要用 %llu

(听说还有更大_int128,但是我不会用)



long double:

比特位:128位

有效数字:18~19

(具体与编译器,操作系统有关)

输入输出:

long double a,b;
scanf("%llf",&a);
printf("%llf\n",a );
cin>>b;
cout<<b<<"\n";

tips:

刷ACM题的时候,当输出类型double时,不一定需要使用%lf,一般都使用%f。

浮点类型的输出方法还有:%e/%E 和 %g;一个是指数形式,一个是自动选择


向上/下取整:

向上取整:double ceil(double x)

向下取整:double floor(double x)


四舍五入:

double b;

int a=(int)(b+0.5);


精度控制:

1).

const double eps = 1e-8;

在强制类型转化和比较浮点大小时,加上eps往往更为保险,而eps具体精度,视题目而定!

double强制转化为int:

int a;
double b;
a = (int)(b+eps);

比较浮点类型大小:

double a,b;
if(a-b>eps)printf("a比较大\n");
if(a-b<-eps)printf("a比较小\n");

2).

控制输出几位小数时:

#include <iomanip>

double a;
printf("%.4f\n",a );
printf("%.*f\n",4,a);

double b;
cout.setf(ios::fixed);
cout<<setprecision(4)<<b<<"\n";

double c;
cout<<fixed<<setprecision(4)<<c<<"\n";

cout.unsetf(ios::fixed);//关闭补0  
cout <<setprecision(4)<<d<<"\n";



猜你喜欢

转载自blog.csdn.net/qq_39599067/article/details/79959511