Pagini recente » Cod sursa (job #288759) | Cod sursa (job #635503) | Cod sursa (job #420255) | Cod sursa (job #1860415) | Cod sursa (job #67597)
Cod sursa(job #67597)
#include<stdio.h>
#include<string.h>
int n[1003], s[1003], b[1003], i[1003], c[1003];
FILE*f=fopen("sarpe.in","r");
FILE*g=fopen("sarpe.out","w");
void citire()
{
char s[1003];
fscanf(f,"%s",s);
int i, l;
l=strlen(s);
for (i=0; i<l; i++)
n[l-i]=s[i]-'0';
n[0]=strlen(s);
}
void inmultire(int A[], int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
void add(int A[], int B[])
{
long long i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0]= i - 1;
}
int compar(int i[], int n[])
{
int j;
if(i[0]>n[0]) return 1;
else //daca sunt egale:
{
for(j=n[0];j>=1;j--)
if(i[j]>n[j]) return 0;
return 1;
}
return 0;
}
void scadere(int A[], int B[])
{
int i, t = 0;
for (i = 1; i <= A[0]; i++)
A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void afis()
{
for (int i=s[0]; i>=1; i--)
fprintf(g,"%d",s[i]);
}
int main()
{
citire();
if (n[0]==1 && n[1]==1) { freopen("sarpe.out","w",stdout); printf("2");}
else if (n[0]==1 && n[1]==2) { freopen("sarpe.out","w",stdout); printf("8");}
else{
b[0]=b[1]=1;
i[1]=i[0]=1;
scadere(n,b);
while (compar(i,n)==1)
{
memcpy(c,i, sizeof(i));
inmultire(c,4);
add(s,c);
add(i,b);
}
afis(); }
return 0;
}