Вам следует беспокоиться не о самом быстром способе, который не имеет смысла для такой простой программы, а о правильности кода и избежании его дублирования.
Ваша программа просто неверна.
Для начала пользователь может прервать ввод. В этом случае хотя бы одна из переменных a, b, c будет иметь неопределенное значение. В результате программа будет иметь неопределенное поведение.
Во-вторых, поскольку вы используете тип int со знаком, когда пользователь может вводить отрицательные числа. В этом случае вы получите неправильный результат, потому что, например, сумма цифр может оказаться отрицательной.
В-третьих, пользователь может ввести 0 в качестве значения числа. В этом случае это число будет пропущено через некоторое время l oop, как это
while (a != 0) {
В этом случае вы снова получите неправильный результат, потому что произведение цифр может быть не равно нулю, хотя должно быть равным нулю в этом случае.
То же самое, пока циклы дублируются. То есть программа имеет избыточный код.
Программа может быть написана следующим образом, как показано в демонстрационной программе ниже.
#include <iostream>
int main()
{
long long int a = 0, b = 0, c = 0;
std::cin >> a >>b >> c;
long long int sum = 0;
long long int product = 1;
for ( int num : { a, b, c } )
{
const long long int Base = 10;
do
{
long long int digit = num % Base;
if ( digit < 0 ) digit = -digit;
sum += digit;
if ( product ) product *= digit;
} while ( num /= Base );
}
std::cout << "sum = " << sum << '\n';
std::cout << "product = " << product << '\n';
return 0;
}