前言
这系列blog记录我读算法笔记的时,遇到的trick,备忘。
读书笔记
①给long long 型数据赋大于
的初值时,要在初值后加LL
(很少用,但记录下来)
②宏定义#define其实是直接将对应的部分替换。所以使用时小心,加括号 ,或不用宏定义( ̄︶ ̄*))
我平时很少用
③
getchar(char) 字符输入
putchar(char)字符输出
scanf:
字符串使用%s读入的时候以空格和换行读入作为结束的标准
%c 可以读入空格和换行
get,puts:
读取字符串,以换行符\n作为结束,
如果真的要读入一行输入,就用gets
sscanf,sprintf
这两个函数是 string scanf,string printf。字符串神器。sscanf把字符串转变成一切。sprintf把一切转变成字符串 。
④printf:%和\不会输出哦,除非加了 %%,\\
亲测有效。但没有用上
⑤
%md | 右对齐,用空格填充 |
---|---|
%0md | 右对齐,用0填充. |
%.mf | 保留m位小数输出 |
非常重要 程序运行时间有用到 %0md, %.mf是经常用
⑥ fabs(double x) 绝对值函数
暂时没用过
⑦
floor(double r)向下取整
ceil(double r)向下取整
我觉得你使用这个函数时,心里应该有个坐标轴,这样负数的情况也能搞清楚
挺常用的
⑧pow(double p,double r)
我不是很爱用,都会自己写一个pow。
⑨sqrt(double)
log(double)
我还没需要需要sqrt和log的题( ̄︶ ̄*))
log是以自然对数为底,我觉得应该会有题目要求任意底数的log,用换底公式
=
⑩
sin(double)
cos(double)
tan(double)
都是以弧度为单位哦。 弧度=
asin(double)
acos(double)
atan(double)
暂时没用过
⑾round(double)
这个函数 math库里没有 ,所以你可以使用 替代
floor(x+0.5)
⑿在函数里不能创建很大的数组。如果要,则创建在函数外。
这篇blog解释了why
⒀浮点数的比较
由于浮点数的存储不总是精确的,所以会给浮点数的比较带来极大的干扰.所以要引入一个极小数eps对这种误差进行修正
const double eps = 1e-8
==等于
如果 a==b ,那么 a 应该落在 [b-eps,b+eps]
> 大于
如果a>b,那么a应该落在[b+eps,
]
< 小于
如果
,则a应该落在[
,b-eps]
>= 大于等于
如果a>=b,则a应该落在[b-eps,
]
<= 小于等于
如果a<=b,则a应该落在[
,b+eps]
⒁
const double pi = acos(-1);