模板大全

这里存放本人的一些板子

不定期会更吖,主要还是人懒

1.高精度加法

#include<bits/stdc++.h>
using namespace std;
char ch[205];
int a[205],b[205],f[205];
int lena,lenb,len;
int main()
{
    cin>>ch+1;
    lena=strlen(ch+1);
    reverse(ch+1,ch+lena+1);
    for(int i=1;i<=lena;i++)
      a[i]=ch[i]-'0';
    cin>>ch+1;
    lenb=strlen(ch+1);
    reverse(ch+1,ch+lenb+1);
    for(int i=1;i<=lenb;i++)
      b[i]=ch[i]-'0';
    len=max(lena,lenb);
    for(int i=1;i<=len;i++)
      f[i]=a[i]+b[i];
    for(int i=1;i<=len;i++)
    {
        f[i+1]+=f[i]/10;
        f[i]%=10;
    }
    if(f[len+1])len++;
    while(f[len]==0&&len>1)len--;
    for(int i=len;i>=1;i--)
      cout<<f[i];
    return 0;
}

2.高精度减法

#include <bits/stdc++.h>
using namespace std;
string s1,s2;
int l1,l2,a[10005],b[10005],c[10005];
bool f;
bool dx()//判断大小的函数
{
    if(l1>l2) return false;
    if(l1<l2) return true;
    for(int i=l1;i>=1;i--)
     if(a[i]<b[i]) return true;
    return false;
}
int main()
{
    cin>>s1>>s2;
    l1=s1.length();
    for(int i=0;i<l1;i++) a[l1-i]=s1[i]-48;
    l2=s2.length();
    for(int i=0;i<l2;i++) b[l2-i]=s2[i]-48;
    if(dx())
    {
        for(int i=1;i<=l2;i++) swap(a[i],b[i]);
        swap(l1,l2);
        f=true;
    }
    for(int i=1;i<=l1;i++){
        if(a[i]<b[i]){
            a[i]+=10;
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
    }
    while(c[l1]==0&&l1>1) l1--;
    if(f) cout<<'-';
    for(int i=l1;i>=1;i--) cout<<c[i];
    return 0;
}

3.高精度乘法

#include<bits/stdc++.h>
using namespace std;
char a1[10001],a2[10001];
int b1[10001],b2[10001],h[1000001];
int main() 
{
    int l1,l2;
    cin>>a1;
    cin>>a2;
    l1=strlen(a1);
    l2=strlen(a2);
    for(int i=0;i<l1;i++)
      b1[i]=a1[l1-1-i]-48;
    for(int i=0;i<l2;i++) 
      b2[i]=a2[l2-1-i]-48;
    int x;
    for(int i=0;i<l1;i++)
    {
        x=0;
        for(int j=0;j<l2;j++)
        {
            h[i+j]+=b1[i]*b2[j]+x;
            x=h[i+j]/10;
            h[i+j]%=10; 
        }
        h[i+l2]+=x;
    }
    int l3=l1+l2;
    while(l3>0&&h[l3]==0) l3--;
    for(int i=l3;i>=0;i--)
      cout<<h[i];
    cout<<endl;
 } 

说实话,高精度模板太ex了啊啊啊

4.递归回溯框架

int s(int k)
{
    for(int i=1;i<=情况种数;i++)
    {
        if(满足判断条件)
        {
            保存结果
            if(搜完了) 输出
            else s(k+1)//继续搜下一个
            恢复原有状态 
         } 
    }
}

 5.快速幂

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,k;
ll pm(ll a,ll b,ll mod){
    ll res=1;
    if(b==0) return 1%mod;
    while(b>0){
        if(b&1){
            res=res*a%mod;
        }
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int main(){
    scanf("%lld%lld%lld",&n,&m,&k);
    printf("%lld^%lld mod %lld=%lld\n",n,m,k,pm(n,m,k));
    return 0;
}

唔......从同学那借鉴过来的QAQ

PS:适用于nmod k

6.快速排序

#include<iostream>
using namespace std;
int n,a[100010];
void qsort(int l,int r){
    int mid=a[(l+r)/2];
    int i=l,j=r;
    do{
        while(a[i]<mid)i++;
        while(a[j]>mid)j--;
        if(i<=j){
            swap(a[i],a[j]);
            i++;
            j--;
        }
    }while(i<=j);
    if(l<j)qsort(l,j);
    if(i<r)qsort(i,r);
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    qsort(1,n);
    for(int i=1;i<=n;i++)
        cout<<a[i]<<" ";
    return 0;
}

C++ 选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。——摘自洛谷P1177

7.求两数最小公倍数

#include<bits/stdc++.h>
using namespace std;
int x,y;
int gcd(int x,int y)
{
    int r=x%y;
    while(r!=0)
    {
        x=y;
        y=r;
        r=x%y;
    }
    return y;
}
int lcm()
{
    return x*y/gcd(x,y);
}
int main()
{
    int m,n;
    cin>>x>>y;
    cout<<lcm();
}

8.求两数最大公因数

#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y)
{
    if(y==0) return x;
    else return gcd(y,x%y);
}
int main()
{
    int x,y;
    cin>>x>>y;
    cout<<gcd(x,y);
}

 9.判断是否为素数(函数)

bool prime(int n)
{
    if(n<=1) return 0;
    if(n==2) return 1;
    for(int i=2;i<=sqrt(n);i++)
      if(n%i==0) return 0;
    return 1; 
}

10.斐波那契数列(递归)

#include<bits/stdc++.h>
using namespace std;
int js(int a)
{
    if(a==1||a==2) return 1;
    else return js(a-1)+js(a-2);
}
int main()
{
    int n;
    cin>>n;
    cout<<js(n);
}

 

posted @ 2021-10-18 22:45  浅夏诗吟  阅读(156)  评论(1编辑  收藏  举报