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的最大正值所以又变为最小负int了
abs(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;
}