c++对数函数log()操作
exp(n)的值为e^n; log()函数以e为底取对数; log10()函数以10为底取对数;
double a=9,b=10;
cout<<log(a)<<endl;//以e为底
cout<<log(exp(a))<<endl;//e^n
cout<<log10(b)<<endl;//以10为底
另外如果自定义以m为底,求logmn的值
log((double)n)/log((double)m)
读入包含空格但以换行符结束的字符串
scanf("%[^\n]",a);
scanf("%[^\n]s",a);
int pos=0;
while(~scanf("%c",&a[pos])) {
pos++;
if(a[pos-1]=='\n') {
pos--;break;
}
}
快速幂
ll powmod(ll a,ll b) {ll res=1;a%=mod;
assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
向下取整
ll Sqrt(ll x)
{
ll l = -1,r = 1e10,mid;
while(r-l > 1)
{
mid = (l+r)>>1;
if(mid*mid > x)
r = mid;
else if(mid*mid < x)
l = mid;
else
return mid;
}
return l;
}
组合数
ll C[40][40];
void init()
{
memset(C,0,sizeof(C));
for(int i=0;i<=40;i++)
C[i][0]=1;
for(int i=1;i<=40;i++)
for(int j=1;j<=i;j++)
C[i][j]=C[i-1][j-1]+C[i-1][j];
}
最大公约数
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
交换a,b的值
a ^= b ^= a ^= b;//第一种
swap(a,b)//第二种
统计一个数二进制中1的个数
int v=9; //被统计的变量
int count; //统计二进制中‘1’的个数
for(count=0; v; count++) {
v &= v-1;
}
求圆周率
M_PI//已经包含在数学头文件
赋值函数:fill fill_n
都可以给数组或者动态数组赋值
fill函数的作用是:将一个区间的元素都赋予val值。函数参数:fill(vec.begin(), vec.end(), val); val为将要替换的值。
int a[10];
fill(a,a+10,6);//从a[0]到a[9]赋值6
fill_n函数的作用是:参数包括 : 一个迭代器,一个计数器以及一个值。该函数从迭代器指向的元素开始,将指定数量的元素设置为给定的值。fill_n(vec.begin(),10,val);
#include <iterator>
vector<int> vec; //定义一个空容器
fill_n (back_inserter(vec), 10 val)
在这个程序中,fill_n() 函数每写入一个值,都会通过back_inserter生产的插入迭代器实现。效果相当于在vec上调用push_back,在vec末尾添加10个元素。