2012-06-01 4 views
0
#include<stdio.h> 

int main() 
{ 
    long ctr[100000],i; 
    float j; 
    long d[100000],T,h,o; 

    scanf("%ld",T); 
    printf("\n"); 

    for(i=0; i<T; i++) 
    { 
     scanf("%ld",d[i]); 
     printf("\n"); 

     for(h=d[i]; h<=0; h--) 
     { 
      j=h%10; 
      if(j==5) 
      { 
       ctr[i]++; 
      } 
     } 
    } 
    for(o=0; o<=i; o++) 
    { 
     printf("%ld\n",o); 
    } 
    return 0; 
} 

Это программа для поиска числа конечных нулей факториала группы из чисел «Т», вводимых пользователем.Конечные нули Factorial, Runtime error в C?

То, что я сделал это, чтобы разделить каждое число на 10 и испытании, если число равно 5. Тогда я уменьшаю число от 1 до тех пор, пока не достигнет 0. Каждой пара 5 * 4 способствует один трейлингу 0.

Является ли программа слишком много памяти или есть другая ошибка времени выполнения? Эта программа дает ошибку времени выполнения, может ли кто-нибудь помочь?

+1

Вы пытались запустить код под отладчиком? Что ты изучал ? Также вы обратили внимание на предупреждения компилятора? Обратите внимание на что-то неправильное: 'scanf ("% ld ", T);' или 'scanf ("% ld ", d [i]);'? –

+2

Вы говорите, что делитесь на ноль? Это большая проблема! – Brady

+0

Нет. На самом деле, это вопрос практики онлайн. Они говорят мне, что это ошибка времени выполнения. – user1194497

ответ

0

Хм ... Эта петля выглядит так, что петля идет бесконечно.

for(h=d[i]; h<=0; h--) 

Таким образом, давая вам ошибку во время выполнения ... Поскольку счетчик будет отрицательным, и ваше состояние петли говорит по-прежнему, пока значение не достигнет меньше или равна нулю, но, похоже, ваше значение никогда не достигнет нуль.

И для функции scanf, не забудьте использовать знак &. Пример:

scanf("%ld", &sampleVariable); 

Это решение для вашей ошибки во время выполнения. :)


А также, возможно, вы должны использовать High Precision переменные, я думаю, вам нужно более высокая точность более чем двойной тип данных, потому что вы будете иметь дело с огромным количеством цифр.

Смотрите здесь добавлена ​​информация: http://www.nongnu.org/hpalib/

+0

Будет ли результат исходить из предположения, что вопрос тот, который я разместил? – user1194497

+0

:) Я просто ответил: «Эта программа дает ошибку времени выполнения, может ли кто-нибудь помочь?», Поэтому я просто помог вам в ошибке времени выполнения. – ChinoCarloSedilla

3

Несколько наблюдений:

  • long[100000] требует 400000 байт стека предполагающей long это просто старые 32 бит, 800000 байт, если long является 64-бит. У вас есть два таких массива, которые могут привести к тому, что ваша программа попадет в пределы размера стека операционной системы.
  • Для функции scanf() требуется указатели где хранить значения, в которых вы читаете. Вы не даете указателям. Как сказал Пол Р в комментарии.
  • Предполагая, что вводятся положительные числа, петля for(h=d[i]; h<=0; h--) никогда не будет управлять своим телом.
+0

Существует вероятность того, что он запустит свое тело, :) если вы поместили отрицательное значение для ввода для d [i] – ChinoCarloSedilla

0

Петля идет бесконечно. Убедитесь, что счетчик не будет отрицательным, иначе у вас будет ошибка времени выполнения.

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