Cod sursa(job #2775037)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 14 septembrie 2021 06:06:32
Problema Sarpe Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<stdio.h>
#include<string.h>
char s[1003];
int i,v[2003],u[2003],z[2003],t,j;
int main()
{
    freopen("sarpe.in","r",stdin),freopen("sarpe.out","w",stdout),fgets(s,1001,stdin),v[0]=strlen(s)-1,z[0]=1,z[1]=4;
    for(i=1;i<=v[0];++i)
        v[i]=s[v[0]-i]-'0';
    for(i=1;i<=v[0];++i) {
        for(t=0,j=1;j<=v[0]||t;++j,t/=10)
            u[i+j-1]=(t+=u[i+j-1]+v[i]*v[j])%10;
        if(i+j-2>u[0])
            u[0]=i+j-2;
    }
    for(t=0,i=1;i<=u[0];++i)
        u[i]-=((i<=v[0])?v[i]:0)+t,u[i]+=(t=u[i]<0)*10;
    for(;u[0]>1&&!u[u[0]];--u[0]);
    for(t=0,i=1;i<=u[0]||t;++i,t/=10)
        u[i]=(t+=u[i]*2)%10;
    u[0]=i-1;
    for(t=0,i=1;i<=u[0]||i<=z[0]||t;++i,t/=10)
        u[i]=(t+=u[i]+z[i])%10;
    u[0]=i-1;
    if(v[0]==1&&v[1]==1)
        printf("2");
    else
        for(i=u[0];i;--i)
            printf("%d",u[i]);
    return 0;
}