Один графоман на Яндекс Дзен написал статью об использовании рекурсии на ассемблере и привел пример вычисления факториала. Естественно, что такое решение не даст правильное значение 100!.
Поэтому лучше сделать так(TinyC):
//https://www.programming9.com/programs/c-programs/259-compute-factorial-of-large-numbers-using-c
#include<stdio.h>
int main()
{
int a[200],n,counter,temp,i;
a[0]=1;
counter=0;
printf("Enter the number to Find Factorial: ");
scanf("%d",&n);
for(; n>=2; n--)
{
temp=0;
for(i=0; i<=counter; i++)
{
temp=(a[i]*n)+temp;
a[i]=temp%10;
temp=temp/10;
}
while(temp>0)
{
a[++counter]=temp%10;
temp=temp/10;
}
}
for(i=counter; i>=0; i--)
printf("%d",a[i]);
return 0;
}
#include<stdio.h>
int main()
{
int a[200],n,counter,temp,i;
a[0]=1;
counter=0;
printf("Enter the number to Find Factorial: ");
scanf("%d",&n);
for(; n>=2; n--)
{
temp=0;
for(i=0; i<=counter; i++)
{
temp=(a[i]*n)+temp;
a[i]=temp%10;
temp=temp/10;
}
while(temp>0)
{
a[++counter]=temp%10;
temp=temp/10;
}
}
for(i=counter; i>=0; i--)
printf("%d",a[i]);
return 0;
}
PureBasic
Global Dim a.l(200)
a(0)=1;
counter.l=0;
For n=100 To 2 Step -1
temp.l=0;
For i=0 To counter
temp=a(i)*n+temp
a(i)=temp%10
temp=temp/10
Next i
While temp>0
counter+1
a(counter)=temp%10
temp=temp/10
Wend
Next n
s.s=""
For i=counter To 0 Step -1
s=s+Str(a(i))
Next i
Debug s
a(0)=1;
counter.l=0;
For n=100 To 2 Step -1
temp.l=0;
For i=0 To counter
temp=a(i)*n+temp
a(i)=temp%10
temp=temp/10
Next i
While temp>0
counter+1
a(counter)=temp%10
temp=temp/10
Wend
Next n
s.s=""
For i=counter To 0 Step -1
s=s+Str(a(i))
Next i
Debug s
Комментарии
Отправить комментарий