Tips

1. <climits> <script type="math/tex" id="MathJax-Element-1"> </script>头文件的使用:

int 的最大和最小值:

INT_MAX和INT_MIN
最大值也可表示为:0x7fffffff(7后面7个f,化成二进制表示共32位,除了首位为0其余位均为1)

longlong 的最大和最小值:

①.LONG_LONG_MAX和LONG_LONG_MIN
②.最大值也可表示为:const long long max = ~0ull>>1
    printf("ULONG_LONG_MAX=     %30lld\n",ULONG_MAX); //unsigned long
    printf("LONG_LONG_LONG_MAX= %30lld\n",LONG_LONG_MAX);
    printf("ULONG_LONG_MAX=     %30llu\n",ULONG_LONG_MAX); //unsigned long long 
    printf("LONG_MAX=           %30d\n",LONG_MAX);
    printf("LONG_LOGN_MAX=      %30I64d\n",LONG_LONG_MAX); // %llu

    printf("LONG_MIN=           %30d\n",LONG_MIN);
    printf("LONG_LOGN_MIN=      %30I64d\n",LONG_LONG_MIN);
    /*
    Result:
    ULONG_LONG_MAX=                  18240558602387455
    LONG_LONG_LONG_MAX=            9223372036854775807
    ULONG_LONG_MAX=               18446744073709551615
    LONG_MAX=                               2147483647
    LONG_LOGN_MAX=                 9223372036854775807
    LONG_MIN=                              -2147483648
    LONG_LOGN_MIN=                -9223372036854775808
    */

2. longlong int 取绝对值:
llabs适用于long long,labs适用于long int,abs适用于int,fabs适用于任何整型(32位以下,包括浮点型),但是返回值是double型的.

#include <iostream>
#include <climits>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int main()
{
    //freopen("out.txt","w",stdout);
    printf("INT_MIN=%d\n",INT_MIN);
    printf("INT_MAX=%d\n",INT_MAX);
    printf("LONG_LONG_MAX=%lld\n",LONG_LONG_MAX);
    printf("LONG_LONG_MIN=%lld\n",LONG_LONG_MIN);
    printf("abs(INT_MIN)=%d\n",abs(INT_MIN));
    printf("abs(INT_MIN+1)=%d\n",abs(INT_MIN+1));
    printf("fabs(INT_MIN)=%d\n",fabs(INT_MIN));
    printf("fabs(INT_MIN+1)=%d\n",fabs(INT_MIN+1));
    printf("fabs(INT_MIN)=%.3f\n",fabs(INT_MIN));
    printf("fabs(INT_MIN+1)=%.3f\n",fabs(INT_MIN+1));
    printf("(int)(fabs(INT_MIN))=%d\n",(int)(fabs(INT_MIN)));
    printf("(int)(fabs(INT_MIN+1))=%d\n",(int)(fabs(INT_MIN+1)));
    printf("llabs(LONG_LONG_MIN)=%lld\n",llabs(LONG_LONG_MIN));
    printf("llabs(LONG_LONG_MIN+1)=%lld\n",llabs(LONG_LONG_MIN+1));
    return 0;
}
/*
Result:
INT_MIN=-2147483648
INT_MAX=2147483647
LONG_LONG_MAX=9223372036854775807
LONG_LONG_MIN=-9223372036854775808
abs(INT_MIN)=-2147483648    //因为abs(INT_MIN)的正值超过了int的最大正值所以又变为最小负intabs(INT_MIN+1)=2147483647
fabs(INT_MIN)=0
fabs(INT_MIN+1)=-4194304
fabs(INT_MIN)=2147483648.000//double型的最大值要大于int的最大值
fabs(INT_MIN+1)=2147483647.000
(int)(fabs(INT_MIN))=-2147483648
(int)(fabs(INT_MIN+1))=2147483647
llabs(LONG_LONG_MIN)=-9223372036854775808
llabs(LONG_LONG_MIN+1)=9223372036854775807
*/

3.用 scanf 读入C++ string

#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    string s[10];
    for(int i=0;i<10;i++)
    {
        s[i].resize(20);//预先分配空间,且s[i].size()就随之确定
        scanf("%s",&s[i][0]);//读入字符长度<20时,后面默认用' '填充
    }
    for(int i=0;i<10;i++)
    {
        puts(s[i].c_str());
        cout<<s[i]<<"size="<<s[i].size()<<endl;
    }
}
/*
Input:
bcbcb
cdecdecdecdecdecde
aaaaaaaa
7545446789754

Output:
bcbcb
bcbcb               size=20
cdecdecdecdecdecde
cdecdecdecdecdecde  size=20
aaaaaaaa
aaaaaaaa            size=20
7545446789754
7545446789754       size=20

                    size=20

                    size=20

                    size=20

                    size=20

                    size=20

                    size=20
*/

4.手动扩栈

#pragma comment(linker, "/STACK:102400000,102400000")

5.优先队列重新定义优先级

priority_queue<int> q1;//默认大的先出队
priority_queue<int, vector<int>, greater<int> > q2;//小的先出队


//自定义比较函数
struct cmp {
    bool operator () (int x, int y){
        return x > y; //x小的优先级高
    }
};
priority_queue<int, vector<int>, cmp > q3;//定义


//重载运算符
struct node{
    int x, y;
    friend bool operator < (node a,node b){//友元函数,如果用成员函数记得加const
        return a.x > b.x;//x小的优先级高
    }
};
priority_queue <node> q4;//定义
//最好重载'<'

6.
计算每行整数之和,以空格间隔。

#include <iostream>
#include <string>  // 包含string类
#include <sstream> // 包含stringstream
using namespace std;

int main()
{
    string line;
    while (getline(cin, line)) { // 从输入流in中读取字符串到s中,以换行符'\n'分开
        int sum = 0, x;
        stringstream ss(line); // 将string作为流读写
        while (ss >> x) sum += x;
        cout << sum << "\n";
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值