факториал в си



Автор Ней мар задал вопрос в разделе Другие языки и технологии

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

Ответ от Krab Bark[гуру]
Зачем два цикла? Затем, это не стандартный С, это C++ или C99. И нет заголовочного файла. Правильно

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

Кроме того, скрипты - это не С и не C++, Под скриптами обычно понимаются, программы, выполняемые интерпретаторами (перевод в машинный язык и сразу выполнение по одной команде) , а не компиляторы.
P.S. Если это C99 - OK 🙂
Да, пропустил: факториалы ВСЕХ чисел. Тогда подправляю.
P.P.S. Виталий, максимальный размер int зависит от реализации компилятора. В 32-битных системах, как правило, до 2 миллиардов.

Ответ от Виталий[гуру]
У тебя переполнение типа 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
", number); } return 0; } А зачем при каждой итерации тебе выводить текущую величину number? Оставь ее за кодовым блоком, ... for(j = 1; j <= 10; j++){ number *= j; } printf("%d
", number); ... Или вообще их убери, если у тебя всего одна операция: ... for(j = 1; j <= 10; j++) number *= j; ... Удачи 🙂

Ответ от Николай[гуру]
Вопрос вы везде используете int а в printf используете "% i
" вместо "% d
"

Ответ от Ёофья Ерина[гуру]
int main (){ int number = 1; for(int n = 1; n <= 10; n++){ number*=n; printf("%d
",number); } return 0; } Так вроде нормально должно быть Проверила - работает

Ответ от Oleg[гуру]
#include <iostream> int main () { int number = 1; for(int n = 1; n <= 10; n++) number *= n; printf("%d
", number); return 0; }

Ответ от Jurijus Zaksas[гуру]
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); }

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Помогите, пожалуйста, с нахождением факториала. Язык Си.
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*