Я написал код, но есть логическая ошибка, которую не могу найти.
Скрипт должен посчитать факториал всех чисел с 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 миллиардов.
#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 миллиардов.
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);
}
{
long long int n=1;
for (k=1; k<=j; k++)
n*=k;
printf("%d!=%d",j,n);
}
Вопрос вы везде используете 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;
...
Удачи :)
Решение - создать свой класс для хранения огромных чисел. Суть - число представляется в виде массива 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;
...
Удачи :)
int main (){
int number = 1;
for(int n = 1; n <= 10; n++){
number*=n;
printf("%d\n",number);
}
return 0;
}
Так вроде нормально должно быть
Проверила - работает
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;
}
int main ()
{
int number = 1;
for(int n = 1; n <= 10; n++)
number *= n;
printf("%d\n", number);
return 0;
}
Похожие вопросы
- Помогите, пожалуйста, написать программу на языке Си
- Помогите пожалуйста с задачкай на языке СИ
- помогите пожалуйста проверить код на языке си, программа работает неверно - не выдает сумму массива Z
- Помогите пожалуйста создать программу "Таймер" на СИ. Заранее всем благодарен!)
- Помогите с разрешением вопроса по языку СИ(не с++)
- Помогите написать (исправить) программу на языке Си++
- Помогите пожалуйста написать программу на языке программирования AssemblerКто первый поможет сделать правильно10балов+50
- Помогите пожалуйста написать простую программу на "Си" по теме: "Стеки"
- Всем привет! Помогите, пожалуйста, разобраться с алгоритмическим языком (псевдокодом)
- помогите, пожалуйста, написать программу на языке Паскаль