Я пытаюсь выполнить задание, в котором мне нужно получить случайное число и вывести сумму цифр внутри числа без дубликатов: например, 123 выведет 6 (1 + 2 + 3), а 32111 -то же самое (поскольку мы не добавляем дубликаты к нашей сумме, сумма этого числа аналогична сумме 123.)
В моем решении я подумал об использовании регистра переключателя для каждого числа и использованииОтметьте, что его значение равно единице, чем в каждом случае я добавляю 1 к флагу, а когда флаг равен 2, я добавляю число к сумме, но я не знаю, как избежать случая после того, как это произошло, что, если яПосмотрите правильно, чтобы избежать использования нескольких флагов для каждого числа (потому что, если бы мы могли избежать случая после того, как он произошел, я мог бы просто установить флаг на один после переключателя и повторить весь процесс)
canты мне поможешь?Большое спасибо!
#include <stdio.h>
#define TEN 10
#define NINE 9
#define EIGHT 8
#define SEVEN 7
#define SIX 6
#define FIVE 5
#define FOUR 4
#define THREE 3
#define TWO 2
#define ONE 1
int main(void)
{
int answer = 0, i = 0, remain = 0, sum = 0, flag = 1;
printf("Enter a number: ");
scanf("%d", &answer);
while(answer >= ONE)
{
remain = answer % TEN;
answer /= TEN;
printf("%d\n", remain);
switch (remain)
{
case ONE:
{
flag++;
if (flag == TWO)
{
sum = sum + ONE;
}
break;
}
case TWO:
{
flag++;
if (flag == TWO)
{
sum = sum + TWO;
}
break;
}
case THREE:
{
flag++;
if (flag == TWO)
{
sum = sum + THREE;
}
break;
}
case FOUR:
{
flag++;
if (flag == TWO)
{
sum = sum + FOUR;
}
break;
}
case FIVE:
{
flag++;
if (flag == TWO)
{
sum = sum + FIVE;
}
break;
}
case SIX:
{
flag++;
if (flag == TWO)
{
sum = sum + SIX;
}
break;
}
case SEVEN:
{
flag++;
if (flag == TWO)
{
sum = sum + SEVEN;
}
break;
}
case EIGHT:
{
flag++;
if (flag == TWO)
{
sum = sum + EIGHT;
}
break;
}
case NINE:
{
flag++;
if (flag == TWO)
{
sum = sum + NINE;
}
break;
}
default:
{
}
}
}
printf("The sum of the number is: %d", sum);
return 0;
}