2014-10-04 2 views
-3

Я пытался решить вопрос о кодеке. Вопрос заключается в следующем:Вычисление Факториала в 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 на моей машине. После многократного прохождения кода я не могу определить свою ошибку? Я буду очень благодарен, если вы, ребята, можете указать на какую-либо ошибку.

+0

Что это должно быть: 'int n [t];'? –

+0

32-разрядные целые числа без знака могут содержать факториалы до 12! в то время как 64-разрядные целые числа без знака могут содержать факториалы до 20! и 128-разрядные целые числа без знака могут содержать факториалы до 34! Достижение 100! потребуется арифметика большого числа - или, по крайней мере, 525-битная арифметика. –

+0

@HotLicks: 'int n [t];' отлично подходит C99 или C11 VLA (массив переменной длины). Как вы думаете, что это было? –

ответ

0

Я побежал это:

gcc -o a a.c 
echo 100 $(seq 1 100) | ./a 

Случай п = 10 явно нарушена (она производит вывод 00), но и многие другие линии выглядят нормально.

Быстрый просмотр кода, который анализирует ввод, когда n = 10 показывает, что выглядит как опечатка: «temp» должен быть «temp1».

+1

Почему downvote? –

+0

как код сломан на 10? ar [0] = temp1% 10 // равно 0 ar [1] = temp1/10 // равно 1 код выглядит нормально. – imox

+0

@imox это не то, что говорит код. Ошибка (temp вместо temp1) указана в моем ответе. –

Смежные вопросы