Pagini recente » Cod sursa (job #2348221) | Cod sursa (job #1088330) | Cod sursa (job #2291778) | Cod sursa (job #80891) | Cod sursa (job #518)
Cod sursa(job #518)
#include<stdio.h>
#include<string>
const int maxn = 101;
short a[maxn],x[maxn];
short x1[maxn];
short i,p1[maxn];
char s[maxn];
short rez2[maxn],rez[maxn];
short p;
short j;
int max (int a,int b)
{
if (a>b) return a;
return b;
}
void ad()
{
x[0]=max(p1[0],x[0]);
for(i=1;i<=x[0];i++)
x[i]+=p1[i];
for(i=1;i<=x[0];i++)
{
if (x[i]>=10)
{
x[i+1]+=1;
x[i]%=10;
}
if (x[x[0]+1]!=0) x[0]++;
}
}
int rid(int p)
{
short p2=0;
memset(rez2,0,(rez2[0]+1)*sizeof(short));
memset(rez,0,(rez[0]+1)*sizeof(short));
memset(x1,0,(x1[0]+1)*sizeof(short));
rez[0]=1;
rez[1]=1;
for(i=1;i<=max(p1[0],x[0]);i++)
x1[i]+=p1[i]+x[i];
x1[0]=max(p1[0],x[0]);
for(i=1;i<=x1[0];i++)
{
if (x1[i]>=10)
{
x1[i]%=10;
x1[i+1]++;
}
if (x1[x1[0]+1]>0) x1[0]++;
}
if (p1[1]==2&&p1[0]==1)
{
p1[1]=2;
}
while (p2<p)
{
p2++;
memset(rez2,0,(rez2[0]+1)*sizeof(short));
if (x1[0]+rez[0]-1>a[0]) return 0;
for(i=1;i<=x1[0];i++)
for(j=1;j<=rez[0];j++)
rez2[i+j-1]+=rez[j]*x1[i];
rez2[0]=rez[0]+x1[0]-1;
for(i=1;i<=rez2[0];i++)
{
if (rez2[i]>10)
{
rez2[i+1]+=rez2[i]/10;
rez2[i]%=10;
if (rez2[rez2[0]+1]>0) rez2[0]++;
}
}
memcpy(rez,rez2,(rez2[0]+1)*sizeof(short));
}
if (rez[0]!=a[0])
{
if (rez[0]<a[0])return 1;
return 0;
}
for(i=rez[0];i>0;i--)
{
if (a[i]!=rez[i])
{
if (rez[i]<a[i])return 1;
return 0;
}
}
return 2;
}
void inmul(int p)
{
for(i=1;i<=p1[0];i++)
{
p1[i]*=p;
}
for(i=1;i<=p1[0];i++)
{
if (p1[i]>=10)
{
p1[i]%=10;
p1[i+1]++;
if (i==p1[0]) p1[0]++;
}
}
}
void imp(int p)
{
for(i=p1[0];i>0;i--)
{
p1[i-1]+=(p1[i]%p)*10;
p1[i]/=p;
if (p1[p1[0]]==0)p1[0]--;
}
}
bool ver()
{
if (p1[0]>(a[0]*20/p)) return false;
if (p1[0]!=a[0]) return p1[0]<a[0];
for(i=p1[0];i>0;i--)
if(p1[i]!=a[i]) return p1[i]<a[i];
return false;
}
int main()
{
freopen("numere2.in","r",stdin);
freopen("numere2.out","w",stdout);
scanf("%s",&s);
a[0]=strlen(s);
for(i=0;i<=a[0]-1;i++)
{
a[i+1]=s[a[0]-i-1]-'0';
}
p1[0]=1;
p1[1]=1;
for(p=150;p>0;p--)
{
memset(x,0,(x[0]+1)*sizeof(short));
memset(x1,0,(x1[0]+1)*sizeof(short));
memset(p1,0,(p1[0]+1)*sizeof(short));
p1[0]=1;
if (p==4)
{
p=4;
}
p1[1]=1;
for(;ver();inmul(2));
for(;p1[0];imp(2))
{
int x3=rid(p);
if (x3==1)
{
ad();
}
if (x3==2)
{
ad();
for(i=x[0];i>0;i--)printf("%d",x[i]);
printf("\n%d",p);
return 0;
}
}
}
for(i=a[0];i>0;i--)
printf("%d",a[i]);
printf("\n1");
return 0;
return 0;
}