سلام من برنامه فاکتوریل اعداد بزرگ را با آرایه ها نوشتم اما باهاش مشکل دارم برای اعداد فرد درست حساب میکنه اما برای اعداد زوج کار نمیکنه در ضمن اعداد بالاتر از 10 را قفل میکنه. میخواستم ببینم چه مشکلی داره برنامه را اینجا میگذارم ببینید.
#include<stdio.h>
#include<conio.h>
void print();
void factor();
void multyply(int[],int[]);
void disjoin(long int);
long int join(int[],int);
void minus(int[]);
int y[10],j=0,u=0,v[10],fact[100],p=0,s[100];//
//
int main()
{
long int c,i;
printf("Enter your number:\n");
scanf("%ld",&c);
if(c==0)
{
printf("Your number is zero!\n");
}
else
{
disjoin(c);
for(i=0;i<=j;i++)
{
printf("%d",y[i]);
}
printf("\n");
for(i=0;i<=u;i++)
{
printf("%d",v[i]);
}
printf("\n");
multyply(y,v);
factor();
}
getch();
return 0;
}
///
void disjoin(long int ent)
{
int k=0,m=0,r=0,i=0,x[10];
while(ent!=0)
{
r=ent%10;
x[i]=r;
j=i;
i++;
ent=ent/10;
}
k=j;
while((k!=-1)&(m!=j+1))
{
y[m]=x[k];
k--;
m++;
}
minus(y);
}
//
void multyply(int y[10],int v[10])
{
int l=0,f=-1,i,q[100],fac[100];
for(i=0;i<100;i++)
{
fac[i]=0;
}
if(join(v,j)!=1)
{
l=0;
f=-1;
int k=j;
while(k!=-1)
{
for(i=0;i<=100;i++)
{
s[i]=0;
q[i]=0;
fac[i]=0;
}
if(j==0)
{
s[l]=y[j]*v[k];
}
else
{
for(i=j;i>=0;i--)
{
s[l]=y[i]*v[k];
l++;
}
}
printf("your s:\n");
if(l==0)
{
printf("%d",s[l]);
}
else
{
for(i=0;i<=l;i++)
{
printf("%d",s[i]);
}
}
printf("\n");
if(l!=0)
{
for(i=0;i<=l;i++)
{
if((s[i]>10)&(s[i]==10))
{
int m=s[i];
int n=s[i+1];
int b=m%10;
int t=m/10;
s[i]=b;
s[i+1]=n+t;
}
}
}
int e=f;
int a=l;
int g=0;
while((g!=(l+1))&(a>-1))
{
q[g]=s[a];
a--;
g++;
}
printf("your q is:");
for(i=0;i<=l;i++)
{
printf("%d",q[i]);
}
printf("\n");
p=0;
if(l!=0)
{
for(i=l;i>=0;i--)
{
printf("%d\n",i);
printf("%d\n",q[i]);
fac[p]=q[i];
printf("%d\n",fac[p]);
p++;
}
for(i=0;i<=p;i++)
{
if((fac[i]>10)||(fac[i]==10))
{
int r=fac[i];
int d=fac[i+1];
int c=r%10;
int z=r/10;
fac[i]=c;
fac[i+1]=d+z;
}
}
}
else
{
fac[p]=q[l];
}
printf("it is fac:");
for(i=0;i<=p;i++)
{
printf("%d",fac[i]);
}
printf("\n");
int ver=p;
int pad=0;
while((ver!=-1)&(pad!=(p+1)))
{
fact[pad]=fac[ver];
ver--;
pad++;
}
f++;
k--;
}
}
printf("\n");
}
///////
void factor()
{
int l=0,f=-1,i,q[100],fac[100];
if(join(v,j)!=1)
{
minus(v);
}
printf("join(v,j):%d",join(v,j));
printf("\n");
if(join(v,j)==1)
{
print();
}
else
{
l=0;
f=0;
int k=j;
while(k!=-1)
{
for(i=0;i<=100;i++)
{
s[i]=0;
q[i]=0;
fac[i]=0;
}
for(i=p;i>=0;i--)
{
s[l]=fact[i]*v[k];
l++;
}
for(i=1;i<=l;i++)
{
if(s[i]>=10)
{
int m=s[i];
int n=s[i+1];
int b=m%10;
int t=m/10;
s[i]=b;
s[i+1]=n+t;
}
}
printf("your s:\n");
for(i=1;i<=l;i++)
{
printf("%d",s[i]);
}
printf("\n");
int e=f;
int a=l;
int g=0;
while((g!=(l+1))&(a>-1))
{
q[g]=s[a];
a--;
g++;
}
printf("your q is:");
for(i=0;i<=l-1;i++)
{
printf("%d",q[i]);
}
printf("\n");
p=0;
for(i=l;i>=0;i--)
{
printf("%d\n",i);
printf("%d\n",q[i]);
fac[p]=q[i];
printf("%d\n",fac[p]);
p++;
}
for(i=0;i<=p-1;i++)
{
if((fac[i]>10)||(fac[i]==10))
{
int r=fac[i];
int d=fac[i+1];
int c=r%10;
int z=r/10;
fac[i]=c;
fac[i+1]=d+z;
}
}
printf("it is fac:");
for(i=1;i<=p-1;i++)
{
printf("%d",fac[i]);
}
printf("\n");
int ver=(p-1);
int pad=0;
while((ver!=0)&(pad!=(p+1)))
{
fact[pad]=fac[ver];
ver--;
pad++;
}
k--;
f++;
}
factor();
}
}
///////////
void print()
{
long int i;
printf("This is your wanted factoriel:\n");
if(p==0)
{
printf("%d",fact[p]);
}
else
{
for(i=0;i<=p-2;i++)
{
printf("%d",fact[i]);
}
}
printf("\n");
}
///
long int join(int x[],int n)
{
int i;
long int conn=0;
if(n==0)
{
conn=x[0];
}
else
{
for(i=0;i<=n;i++)
{
conn=(conn*10)+x[i];
}
}
return conn;
}
////////////////
void minus(int b[10])
{
int x[10],d,m=0,r=0,i=0;
long int k=join(b,j)-1;
while(k!=0)
{
r=k%10;
x[i]=r;
u=i;
i++;
k=k/10;
}
d=u;
while((d!=-1)&(m!=u+1))
{
v[m]=x[d];
d--;
m++;
}
}