вычислить сумму факториалов цифр 3-значного числа

#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);
}