Cod sursa(job #1484656)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 11 septembrie 2015 16:58:14
Problema Sarpe Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 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]);
}