#c #factorial
#c #факториал
Вопрос:
Я написал этот код на c для вычисления суммы факториалов цифр в трехзначном числе, но он не работает:
вывод:
Возвращенный процесс -1073741571 (0xC00000FD) время выполнения: 9.337 с Нажмите любую клавишу, чтобы продолжить.
#include <iostream>
#include <exception>
using namespace std;
unsigned fact(int n)
{
if (n == 1|n==0)
return 1;
else
return n * fact(n - 1);
}
int main()
{
int num;
int sum=0;
int tmp;
cout<<"Enter 3 digit number:n";
cin>>num;
if(num<99|num>999)
{
cout<<"Not a 3 digit number!";
return (1);
}
tmp = num%100;
sum = sum fact(tmp);
tmp = num%10;
sum = sum fact(tmp);
tmp = num%1;
sum = sum fact(tmp);
cout<<"Sum of factorial of digits in a number:"<<sum;
return(0);
}
Комментарии:
1. Что ваша
fact
функция будет делать с 0?2. отредактировано, чтобы включить 0;
3. Я думаю, вы имеете в виду
||
не|
(оба раза — хотя, честно говоря, они должны работать независимо, это просто немного странно). В любом случае, ваша большая проблема заключается в том, как вы получаете цифры,num0
может быть довольно большой…4. Какое число вы вводите, или оно не доходит до точки ввода?
5. Кроме того,
num<99
должно бытьnum <= 99
. Так много ошибок! Вам действительно следует приложить больше усилий, прежде чем публиковать свой код здесь.
Ответ №1:
Цифры num
не num % 100
, num % 10,
и num % 1
. Что натолкнуло вас на эту идею?
Возьмем, к примеру num=567
. Тогда мы имеем
num % 100 = 67
num % 10 = 7
num % 1 = 0
Вам нужно подумать об этом немного больше.
Ответ №2:
Я забыл, как выбирать цифры числа, это работает сейчас:
#include <iostream>
#include <exception>
using namespace std;
unsigned fact(int n)
{
if (n == 1||n==0)
return 1;
else
return n * fact(n - 1);
}
int main()
{
int num;
int sum=0;
int tmp;
cout<<"Enter 3 digit number:n";
cin>>num;
if(num<=99|num>999)
{
cout<<"Not a 3 digit number!";
return (1);
}
tmp = num%10;
sum = sum fact(tmp);
tmp = num/10%10;
sum = sum fact(tmp);
tmp = num/100%10;
sum = sum fact(tmp);
cout<<"Sum of factorial of digits in a number:"<<sum;
return(0);
}