Tips

来源:互联网 发布:java命令无法加载主类 编辑:程序博客网 时间:2024/05/21 17:06

1.<climits>头文件的使用:

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.longlongint取绝对值:
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=-2147483648INT_MAX=2147483647LONG_LONG_MAX=9223372036854775807LONG_LONG_MIN=-9223372036854775808abs(INT_MIN)=-2147483648    //因为abs(INT_MIN)的正值超过了int的最大正值所以又变为最小负intabs(INT_MIN+1)=2147483647fabs(INT_MIN)=0fabs(INT_MIN+1)=-4194304fabs(INT_MIN)=2147483648.000//double型的最大值要大于int的最大值fabs(INT_MIN+1)=2147483647.000(int)(fabs(INT_MIN))=-2147483648(int)(fabs(INT_MIN+1))=2147483647llabs(LONG_LONG_MIN)=-9223372036854775808llabs(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:bcbcbcdecdecdecdecdecdeaaaaaaaa7545446789754Output:bcbcbbcbcb               size=20cdecdecdecdecdecdecdecdecdecdecdecde  size=20aaaaaaaaaaaaaaaa            size=2075454467897547545446789754       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> // 包含stringstreamusing 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;}
0 0