Другие языки программирования и технологии

Помогите, пожалуйста, с нахождением факториала. Язык Си.

Я написал код, но есть логическая ошибка, которую не могу найти.

Скрипт должен посчитать факториал всех чисел с 1 до 10.

int main (void){

int number = 1;

for(int n = 1; n <= 10; n++){

for(int j = 1; j <= n; j++)number *= j;
}
printf("%i\n", number);

return 0;
}

Вроде все верно, но выдает нуль. Где эта ошибка? Уже 2 для и ночь думаю.. . Аж глаза покраснели :(
Зачем два цикла? Затем, это не стандартный С, это C++ или C99. И нет заголовочного файла. Правильно

#include<stdio.h>
int main (){
int number = 1,j;
for(j = 1; j <= 10; j++){number *=j; printf("%d\n", number);}
return 0;}

Кроме того, скрипты - это не С и не C++, Под скриптами обычно понимаются, программы, выполняемые интерпретаторами (перевод в машинный язык и сразу выполнение по одной команде) , а не компиляторы.
P.S. Если это C99 - OK :)
Да, пропустил: факториалы ВСЕХ чисел. Тогда подправляю.
P.P.S. Виталий, максимальный размер int зависит от реализации компилятора. В 32-битных системах, как правило, до 2 миллиардов.
Слава Кравченко
Слава Кравченко
71 249
Лучший ответ
for (int j=1; j<=10; j++)
{
long long int n=1;
for (k=1; k<=j; k++)
n*=k;
printf("%d!=%d",j,n);
}
Фанис Зиганшин
Фанис Зиганшин
96 744
Вопрос вы везде используете int а в printf используете "% i\n" вместо "% d\n"
У тебя переполнение типа int. Число настолько большое, что не влезает в тот участок памяти, что ты ей выделил своим int number = 1, если взять n <= 9, то выводит число.
Решение - создать свой класс для хранения огромных чисел. Суть - число представляется в виде массива int-овых значений, например, число 101010 будет выглядеть как массив из 6 элементов, где, скажем, 3й элемент равен одному.
Может есть и попроще рецепт на конкретно твою задачу, но тебе будет полезно узнать про длинную арифметику и как быстро с ней работать.

p.s. Кстати, да, не посмотрел на задачу. Если нужно просто найти факториал десяти, то второй цикл и не нужен был. Достаточно было убрать второй, и все работало бы как часы.

p.p.s. вчитался еще раз, и не понял условие. Всё-таки нужно найти один факториал 10, или 10 факториалов от 1 до 10? Непонятное условие.

p.p.p.s. Кстати, еще непонятка для меня. Насколько я помню, в int хранится от -32768 до 32767. Если я у себя оставляю тип int и меняю n<=10 на n<=9, то выводит число 1073741824, а это уже явно long. В чем прикол?

UPD.
Krab Bark, спасибо. Я намудрил с циклами.

Чуть-чуть изменил ваш цикл и получилось:

#include <stdio.h>
int main (void){

int number = 1, j;

for(j = 1; j <= 10; j++){

number *= j;
printf("%d\n", number);
}

return 0;
}
А зачем при каждой итерации тебе выводить текущую величину number? Оставь ее за кодовым блоком,
...
for(j = 1; j <= 10; j++){

number *= j;
}
printf("%d\n", number);
...
Или вообще их убери, если у тебя всего одна операция:
...
for(j = 1; j <= 10; j++)
number *= j;
...
Удачи :)
No Name ,
No Name ,
3 324
int main (){

int number = 1;

for(int n = 1; n <= 10; n++){

number*=n;
printf("%d\n",number);
}

return 0;
}

Так вроде нормально должно быть
Проверила - работает
#include <iostream>
int main ()
{
int number = 1;
for(int n = 1; n <= 10; n++)
number *= n;
printf("%d\n", number);
return 0;
}