ACM小技巧+模板(持续更新)

博客介绍了C++的一些常用操作,如对数函数log()、以e和10为底的对数计算,自定义底数的对数求解,还提及读入字符串、快速幂、向下取整等操作。此外,详细介绍了赋值函数fill和fill_n,可对数组或动态数组赋值。

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个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值