位运算
__builtin_popcount(a)统计数字a在二进制下“1”的个数
字符串转换
stoi: string型变量转换为int型变量
stol: string型变量转换为long型变量
stoul:string型变量转换为unsigned long型变量
stoll: string型变量转换为long long型变量(常用)
stoull:string型变量转换为unsigned long long型变量
stof: string型变量转换为float型变量
stod: string型变量转换为double型变量(常用)
stold:string型变量转换为long double型变量
string s;
stoll(s1,nullptr,16);
//16进制转10进制
stoll(s,nullptr,2);
//2进制转10进制
nullptr表示空指针;
保留K位小数
#include<bits/stdc++.h>
using namespace std;
int main(){
double m,n,rt,p;
cin>>m>>n>>p;
rt=m*pow(2.718281828459045,(-0.114514*n));
cout<<fixed<<setprecision(p)<<rt;
return 0;
}
sort排序
)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!
II)Sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
Sortt函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>arr;
for(int i=0;i<n;i++)
{ int a;
cin>>a;
arr.push_back(a);
}
sort(arr.begin(),arr.end());
for(vector<int>::iterator it=arr.begin();it!=arr.end();it++)
{
cout<<*it<<" ";
}
return 0;
}
或者
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
sort(a,a+10,greater<int>());
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
return 0;
}
等价与vector注意两者的使用方法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
排除输入的小数的方法
字符串集体转小写的方法
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
for(char &c:s)
{
c=tolower(c);
}
int b=s.find("bob");
if(b<0)cout<<"-1";
else cout<<b;
}
命名时以数字开头会无法编译
sort的进阶使用暨结构体的复习
#include<bits/stdc++.h>
using namespace std;
struct T {
int h;
int m;
int s;
};
bool camp(T a,T b)
{
return a.h*3600+a.m*60+a.s< b.h*3600+b.m*60+b.s;
}
int main(){
int n;
cin>>n;
struct T arr[n];
for(int i=0;i<n;i++)
{
cin>>arr[i].h>>arr[i].m>>arr[i].s;
}
sort(arr,arr+n,camp);
for(int i=0;i<n;i++)
{
cout<<arr[i].h<<" "<<arr[i].m<<" "<<arr[i].s<<endl;
}
return 0;
}
原题见牛客“竞赛技巧”
试除法
for(int i=2;i<=x/i;i++)
{
if(x%i==0)
{
while(x%i==0)
{
x=x/i;
}
cout<<i<<' ';
}
}
if(x>1)
{
cout<<x<<endl;
}else{
cout<<endl;
}
}
可很好解决输出素因子时重复输出的问题;且数据之间不相互影响
输出最大值及其最小下标
int max=0;
int maxi=-1;
for(int i=0;i<n;i++)
{
if(a[i]>max)
{
max=a[i];
maxi=i;
}
}
关键在于a[i]>max而不是>=