PAT算法刷题(1)

本文最后更新于:2023年6月19日 晚上

Tips

  1. 浮点型不要用 float 定义,而要用 double 定义,因为精度问题,float 只能有效精度为 6 位左右。
  2. ASCII 码中,小写字母比大写字母的 ASCII 码大 32,具体是 AZ:6590,az:97122
  3. 位运算符:
    1. A<<x 左移,整数 A 按照二进制左移 x 位
    2. a & b 位与,整数 a 和 b 按二进制对齐,按照位进行与运算
    3. a | b 位或,整数 a 和 b 按二进制对齐,按照位进行或运算
    4. a ^ b 位异或,按位进行异或运算
    5. ~a,取反,整数 a 的二进制每一位取反
  4. scanf 的格式化输入–只记录几种不常用的
    1. long long 的输入 :%lld
    2. double 的输入: %lf
    3. 字符串(char 数组): %s,注意,字符串输入不需要加&进行取址,即 scanf(“%s”,str)是正确的。(因为数组名称本身就代表这个数组第一个元素的地址,所以不需要加取地址)
  5. typedef 是给复杂的数据结构起别名的
    1. 例 1: typedef long long LL;//给 long long 起别名 LL
  6. 一些常用的 math 函数
    1. floor(double x)–向下取整
    2. ceil(double x)–向上取整
    3. log()–用于返回以自然对数为底的对数
      1. 注意,c 里面没有对任意底数求对数的函数,必须用换底公式 log_a{b}=log_e{b}/log_e{a}
    4. sin,cos,tan–三角函数,必须是弧度制,即 pi/2 一类的
    5. asin,acos–返回 double 的三角函数值
  7. switch
1
2
3
4
5
6
7
8
9
10
switch(表达式){
case 常量结果1:
...
break;
case 结果2:
...
break;
default:
....
}
  1. 数组初始化
    1. 比如 int a[10] = {0};就可以把整个数组都赋值 0,或者int a[10] = {};也可以做到
    2. 如果数组大小在 10 的 6 次方以上,需要将其定义在主函数之外,即静态存储区申请空间,如int a[1000000];
    3. memset-对数组中每个元素赋值相同值
      1. memset(数组名,值,sizeof(数组名))
      2. 建议只使用 memset 赋值 0 和-1,因为它是按字节赋值,比如 int 是 4 个字节
      3. 对于数组赋予其他值(比如 1),请使用 fill 函数
  2. gets 识别\n 作为输入结束,因此使用 scanf 接收完之后,如果要使用 gets,需要先用 getchar()接收整数后的换行符
  3. strlen()–字符串长度
  4. strcmp(char a[].char b[])–字符串比较
  5. strcpy(char a[].char b[])–把 b 字符串数组赋给 a 数组
  6. 字符串处理利器
  7. sscanf(char str[],”%d”,& int n)–把字符串数组的内容以%d 的格式写到变量 n 中–从左到右
  8. sprintf(char str[],”%d”,int n)–把整型变量 n 以%d 的格式写到 str 数组中,从右到左

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!