Pagini recente » Cod sursa (job #2486936) | Cod sursa (job #352842) | Cod sursa (job #1651032) | Cod sursa (job #961318) | Cod sursa (job #205832)
Cod sursa(job #205832)
#include<stdio.h>
#include <string.h>
int n[200], a[200], b, x, aux[200], unu[200], d[200];
int compar(int a[], int da, int b[], int db)
{
int i;
if (da > db) return 1;
if (da < db) return -1;
if (da == db)
{
for (i = da; i >= 1; i--)
if (a[i] != b[i])
{
if (a[i] > b[i]) return 1;
else return -1;
}
}
return 0;
}
void inmultire(int A[], int B[])
{
int i, j, t;
int C[200];
for (i = 1; i <= A[0]; i++)
{
for (j = 1, t = 0; j <= B[0] || t; j++, t /= 10)
C[j + i - 1] = (t += C[i + j - 1] + A[i] * B[j]) % 10;
if (i + j - 2 > C[0] ) C[0] = i + j - 2;
}
for (i = 1; i <= C[0]; i++) A[i] = C[i], C[i] = 0;
A[0] = C[0]; C[0] = 0;
}
void adunare(int A[], int B[])
{
int 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;
}
void copy(int A[], int B[])
{
for (int i = 0; i <= B[0]; i++) A[i] = B[i];
}
void afis()
{
int i;
for (i = a[0]; i >= 1; i--) printf("%d",a[i]);
}
int main()
{
freopen("numere2.in","r",stdin);
freopen("numere2.out","w",stdout);
char s[200];
int len;
scanf ("%s",s);
len = strlen(s);
n[0] = len;
for (int i = 1; i <= len; i++) n[i] = s[len - i] - '0';
d[0] = 1; d[1] = 2;
unu[0] = unu[1] = 1;
for (; compar(d,d[0],n,n[0]);)
{
copy(a,d);
copy(aux,d);
b = 1;
while (compar(a,a[0],n,n[0]) == -1)
{
b++;
inmultire(a,aux);
}
if (compar(a,a[0],n,n[0]) == 0)
{
afis();
printf("\n%d\n",b);
return 0;
}
adunare(d,unu);
}
return 0;
}