#c
#c
Вопрос:
Я пытаюсь написать программу, которая умножает все числа от 1
до N
, где N
это число, введенное пользователем.
Например, если я ввожу 5
, я хочу, чтобы программа умножала каждое число от 1
до 5
.
Программа будет вычислять 1 * 2 * 3 * 4 * 5 = 120
.
Я новичок в C и программировании в целом, но мне удалось написать этот код, который делает что-то похожее на то, что я хочу.
#include<stdio.h>
int main(void)
{
int N, rem, prod = 1;
printf("Enter the value of N: ");
scanf("%d", amp;N);
while(N != 0)
{
rem = N % 10;
prod *= rem;
N /= 10;
}
printf("%d", prod);
return 0;
}
Мой код умножает каждое число друг на друга, но пользователь должен вводить каждое из них вручную.
Например, если бы я хотел получить результат, о котором я упоминал ранее, мне пришлось бы ввести 12345
.
Вместо этого я хотел бы ввести просто 5
.
Я был бы признателен за некоторые рекомендации по этому поводу.
Комментарии:
1. Почему ваш код вычисляет напоминание (
rem
)?2. Какое наибольшее
N
значение может быть введено?3. Это называется «факториал», и по этому поводу возникает множество вопросов.
4. Я не думал о наибольшем числе для N, которое может быть введено. Однако для моих целей нормально, что я использую
int
для N, поскольку мне это не понадобится для таких больших чисел.5. Я не знал, как это называется, поэтому мне было трудно найти другие сообщения с этой проблемой.
Ответ №1:
Вам понадобится что-то вроде:
for(int i = 2; i <= N; i ){
prod *= i;
}
Имейте в виду, что значение if N
достаточно велико prod
, что в конечном итоге приведет к переполнению.
Максимальное значение an int
обычно 2 147 483 647
равно 2 31-1. Для этого предельного значения 12
будет максимально N
возможным.
Вы могли бы растянуть это до 20
, если используете long long
вместо int
.
Верхний предел a long long
равен, по крайней мере 9 223 372 036 854 775 807
, 2 63-1.
Для завершения вам следует проверить возврат scanf
, чтобы убедиться, что входные данные были правильно проанализированы, например:
if(scanf("%d", amp;N) == 1){
//Ok, input parsed
}
else{
//input not parsed
}
Комментарии:
1. ПОДСКАЗКА: имейте в виду, что C не имеет точных размеров для типов данных. Таким образом, int МОЖЕТ быть 32-разрядным. Но это также может быть 16, 64 или любой другой размер бит -> В основном зависит от компилятора и / или вашей целевой платформы.
2. @hiddenAlpha, в основном правильно, вот почему используется слово «обычно». Когда вы говорите «или любые биты по размеру», это не совсем точно,
int
должно быть не менее 16 бит.