算法笔记_胡凡读书笔记

第一章

此章节,是没有什么记录的东西,到最后再提炼刷题的知识。

第二章

INT 范围问题

题目范围在 10^9(-2^31~2^31-1)及以下用int(32字节)就可以。如果在-2^63~2^63-1(范围超过2147483647(10^10或10^18))就用需要long long来实现.

浮点数问题

能用double,就用double

  1. float 32位 -2^128~2^128 1位符号位 8位指数位,23位尾数位 但是精度只有6-7位。
  2. double 64位 -2^1024~2^1024 1位符号位 11位指数位,52位尾数位 精度只有15-16位。
  3. %m.nf 总共m位 n位小数。

    布尔型

    bool 类型在C++可以直接使用 但是在C语言中必须添加stdbool.h头文件。非零则为ture.
    在计算机中ture=1 false = 0

    符号常量和const常量

    实现ADD(a,b)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<iostream>
    #include<cstdio>
    #define ADD(a,b) ((a)+(b))
    using namespace std;
    int main()
    {
    int num1=3,num2=5;
    printf("%d",ADD(num1,num2));
    return 0;
    }

注意
发现此时define对应的括号的数量很多,因为define中对应的括号会产生优先级的问题。
例如下面的例子

1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<cstdio>
#define CAL(x) (x*2+!)
using namespace std;
int main()
{
int a=1;
printf("%d\n",CAL(a+1));
return 0;
}

此时输出的是4 而不是5 因为宏定义是原封不动的替换,因此导致CAL(a+1)=a+12+1=4 而不是(a+1)2+1