Как я могу решить эту проблему, используя указатель в c? - PullRequest
0 голосов
/ 06 апреля 2020

Могу ли я решить эту проблему с помощью указателей, и если да, то как это сделать? Я решил это с помощью просто функции, используя ... Проблема: Напишите функцию, которая возвращает сумму и произведение цифр некоторого числа

#include <stdio.h>

/*  function:   sumDigits
    to calculate sum of all digits.
*/

int sumDigits(int num)
{
    int sum=0,rem;
    while(num > 0)
    {
        rem=num%10;
        sum+=rem;
        num=num/10;
    }

    return sum;
}

/*  function:   proDigits
    to calculate product of all digits.
*/

int proDigits(int num)
{
    int pro=1,rem;
    while(num > 0)
    {
        rem=num%10;
        pro*=rem;
        num=num/10;
    }

    return pro;

}
int main()
{
    int n;
    printf("\nEnter an integer number :");
    scanf("%d",&n);

    printf("\nSUM of all Digits is : %d",sumDigits(n));
    printf("\nPRODUCT of all digits: %d",proDigits(n));
    return 0;
}

1 Ответ

0 голосов
/ 06 апреля 2020

Выполнение обеих задач совместно с одной функцией будет выполнено с:

void sumprodDigits(int num, int *sum, int *prod)
{
    *sum = 0;
    *prod = (num > 0) ? 1 : 0;

    while(num > 0)
    {
        *sum += num % 10;
        *prod *= num % 10;
        num /= 10;
    }
}

И вызовом от вызывающей стороны:

sumprodDigits(n, &sum, &prod);

Где sum и prod объявлены как int аналогично n. Затем результаты могут быть распечатаны непосредственно из тех переменных, в которых вы в настоящее время печатаете результаты функции.


Понимать, что выше не требуется, если вы укажете многозначные результаты в структуру . Например:

typedef struct Results
{
    int sum;
    int prod;
} Results;

Теперь вы можете снова вернуться к своей исходной форме:

Results calcDigits(int num)
{
    Results res = {0, (num > 0 ? 1 : 0) };

    while (num > 0)
    {
        res.sum += num % 10;
        res.prod *= num % 10;
        num /= 10;
    }

    return res;
}

После этого main будет вызываться просто:

Results res = calcDigits(n);
printf("\nSUM of all Digits is : %d", res.sum);
printf("\nPRODUCT of all digits: %d", res.prod);

Поэтому, хотя использование указателей в качестве формальных аргументов ввода / вывода для этого упражнения является одним из вариантов, это не единственный способ сделать это, и указатели не обязательны для достижения желаемых результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...