高精模板

加法

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=600;
char x[maxn],y[maxn];
int a[maxn],b[maxn],c[maxn];
int m;
int main()
{
    scanf("%s",x);
    scanf("%s",y);
    int lena=strlen(x);
    int lenb=strlen(y);
    for(int i=0;i<lena;i++)
    {
        a[lena-i]=(int)(x[i]-48);
    }
    for(int i=0;i<lenb;i++)
    {
        b[lenb-i]=(int)(y[i]-48);
    }
    m=max(lena,lenb);
    for(int i=1;i<=m;i++)
    {
        c[i]+=a[i]+b[i];
        if(c[i]>=10)
        {
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    }
    if(c[m+1]) m++;
    for(int i=m;i>=1;i--)
    {
        printf("%d",c[i]);
    }
    return 0;
}


P1255 数楼梯

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=5020;
int n;
ll f[maxn][5003];
int len=1;
int i;
void goon(int x)
{
    for(i=1;i<=len;i++)
    {
        f[x][i]=f[x-1][i]+f[x-2][i];
    }
    for(int i=1;i<=len;i++)
    {
        if(f[x][i]>=10)
        {
            f[x][i+1]+=f[x][i]/10;
            f[x][i]%=10;
        }
    }
    if(f[x][len+1]) len++;
}

int main()
{
    scanf("%d",&n);
    f[1][1]=1;f[2][1]=2;
    for(int j=3;j<=n;j++)
    {
        goon(j);
    }
    for(int i=len;i>=1;i--)
    {
        printf("%d",f[n][i]);
    }
    return 0;
}

 乘法

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[20100];
int a[20100],b[20100];
int c[20100];
int len1,len2;
int main()
{
    scanf("%s",s);
    len1=strlen(s);
    if(len1==1&&s[0]=='0') 
    {
        printf("0");
        return 0;
    }
    /*for(int i=len1-1;i>=0;i--)
    {
        a[i]=s[i]-'0';
    }*/
    for(int i=0;i<len1;i++) a[i]=s[len1-i-1]-'0';
    scanf("%s",s);
    len2=strlen(s);
    if(len2==1&&s[0]=='0') 
    {
        printf("0");
        return 0;
    }
    /*for(int i=len2-1;i>=0;i--)
    {
        b[i]=s[i]-'0';
    }*/
    for(int i=0;i<len2;i++) b[i]=s[len2-i-1]-'0';
    for(int i=0;i<len1;i++)
    {
        for(int j=0;j<len2;j++)
        {
            c[i+j]+=a[i]*b[j];
        }
    }
    int high=len1+len2-1;
    for(int i=0;i<high;i++)
    {
        if(c[i]>=10)
            {
                c[i+1]+=c[i]/10;
                c[i]=c[i]%10;
            }
    }
    if(c[high]) high++;
    for(int i=high-1;i>=0;i--)
    {
        printf("%d",c[i]);
    }
    return 0;
}

 

posted @ 2019-09-18 19:50  AiRomance  阅读(195)  评论(0编辑  收藏  举报