Я пытался решить вопрос о кодеке. Вопрос заключается в следующем:Вычисление Факториала в C приводит к неправильному ответу
Я должен найти факториал числа n (1 < = n < = 100). Конкретный вопрос: here.
Я написал следующий код для его решения.
#include<stdio.h>
int main() {
int ar[160],m,temp,temp1,t,x,i,j;
scanf("%d",&t);
int n[t];
for(i=0;i<t;i++)
scanf("%d",&n[i]);
for(j=0;j<t;j++)
{
temp1=n[j];
if(n[j]==100)
{
ar[0]=0;
ar[1]=0;
ar[2]=1;
m=3;
}
else if(n[j]<100&&n[j]>=10)
{
ar[0]=temp1%10;
ar[1]=temp/10;
m=2;
}
else if(n[j]<10)
{
ar[0]=temp1%10;
m=1;
}
n[j]=n[j]-1;
while(n[j]>=1)
{
temp=0;
for(i=0;i<m;i++)
{
x=ar[i]*n[j]+temp;
ar[i]=x%10;
temp=x/10;
}
while(temp>0)
{
m=m+1;
ar[m-1]=temp%10;
temp=temp/10;
}
n[j]=n[j]-1;
}
for(i=m-1;i>=0;i--)
printf("%d",ar[i]);
printf("\n");
}
return 0;
}
Но я получаю неправильный ответ на оценку. Однако мой код отлично работает на Ideone.com и gcc на моей машине. После многократного прохождения кода я не могу определить свою ошибку? Я буду очень благодарен, если вы, ребята, можете указать на какую-либо ошибку.
Что это должно быть: 'int n [t];'? –
32-разрядные целые числа без знака могут содержать факториалы до 12! в то время как 64-разрядные целые числа без знака могут содержать факториалы до 20! и 128-разрядные целые числа без знака могут содержать факториалы до 34! Достижение 100! потребуется арифметика большого числа - или, по крайней мере, 525-битная арифметика. –
@HotLicks: 'int n [t];' отлично подходит C99 или C11 VLA (массив переменной длины). Как вы думаете, что это было? –