【基础 | 笔记】

位运算符

&(按位与):同位二进制均为1,则为1

|(按位或):同位二进制有1,则为1

^(按位异或):同位二进制不同,则为1

~(取反)

<<(左移):各位二进制向左移动指定位数,高位丢弃,低位补0

>>(右移):各位二进制向右移动指定位数,注意符号位也将随同移动(正数最高位为0,负数最高位为1)。

常用库函数

绝对值:abs(x)                                  自然数指数:exp(x)

向下取整:floor(x)                              向上取整:ceil(x)

自然对数:log(x)                                指数:pow(a,b)

平方根:sqrt(x)                                  随机函数:rand()

格式化输入输出

%s:输入字符串(非空格开始,空格结束,注意字符串变量以'\0'结尾)

%*d:对应输入量不赋值给一个变量

%xd:(x为数字)指定输入所占域宽

%md:输出m位(不足补空格,大于m位按实际长度输出)

%-md:左对齐输出

%0md:位数不足m时补0

说明:

1. 考虑时效(大数据输入输出):使用scanf、printf

2. 考虑格式化:使用scanf、printf

3. 考虑变量的数据类型复杂:使用cin、cout

switch语句

switch(表达式) {
    case 常量表达式1:语句序列1;break;
    case 常量表达式2:语句序列2;break;
    ······
    default:语句序列n+1;
}

执行过程:

1. 计算switch后面表达式的值M

2. 依次计算每个case后常量表达式的值M1···Mn

3. 依次比较配对。如果均不相等,则有default语句就执行语句序列n+1,否则不执行任何操作(即可以省略整个default部分)

循环结构

【例1.求两个正整数的最大公约数 | 辗转相除法(欧几里德算法)】

原理:m,n,r分别表示被除数、除数、余数,则m和n的最大公约数等于n和r的最大公约数。

r=m%n;
while(r!=0) {   //或简写为 while(r)
    m=n;
    n=r;
    r=m%n;
}

【例2.分解质因数】

int i=2;
do {
    while(n%i==0) {
        cout<<i;
        n/=i;
        if(n!=1) cout<<"*";
    }
    i++;
} while(n!=1);

【例3.阶乘之和】

int t=1,s=0;
for(int i=2;i<=n;i++) {
    t*=i;
    s+=t;
}
cout<<s;

补充:计时函数clock()

使用该函数返回程序目前为止运行的时间

(将其除以常数CLOCKS_PER_SEC后得到的值以“秒”为单位)

printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC);

求素数

1. 定义法

2. 优化定义法:判断是否被2~\sqrt{n}内任意数整除

3. 筛法:

bool a[n+1];
memset(a,1,sizeof(a));
a[1]=false;
for(int i=2;i<=sqrt(n);i++) {
    if(a[i]) {
        for(int j=2;j<=n/i;j++) a[i*j]=false;  //筛掉所有a[i]这个数的倍数
}
for(int i=2;i<=n;i++) {
    if(a[i]) cout<<i<<" ";  //筛完后仍被标记为true的就是素数
}

补充:函数memset()、函数memcpy()

1. memset(a,1,sizeof(a)):将a数组全部赋值为1。注意int型数组只能赋值为0或1,否则出错。

2. memcpy(b,a,sizeof(类型)*k):从a数组赋值k个元素到b数组。


  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值