Выполнение обеих задач совместно с одной функцией будет выполнено с:
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);
Поэтому, хотя использование указателей в качестве формальных аргументов ввода / вывода для этого упражнения является одним из вариантов, это не единственный способ сделать это, и указатели не обязательны для достижения желаемых результатов.