繁体   English   中英

除了在c中重复的数字之外,如何将数字的数字总和相加?

[英]how do I add up the sum of the digits of a number except for digits that repeat themselves in c?

我有一个作业,我需要把它的数字相加并忽略一次重复自己,例如 234111 -> 2 + 3 + 4 + 1 -> 10 我试过这样做:#include

int main(void)
{
int i = 0;
int num = 0;
int sum = 0;

printf("Please enter a number\n");
scanf("%d", &num);

while(num > 0){

    sum += num%10;
    num /= 10;

}
printf("%d", sum);
return 0;
}

我所做的只是将数字相加,它并没有忽略那些重复的数字我需要在代码中添加什么?

您可以保留已使用数字的“标志”数组:

#include <stdio.h>

int main(void)
{
//  int i = 0; // You don't actually use this in the code!
    int num = 0;
    int sum = 0;
    int used[10] = { 0, }; // Set all "used" flags to zero

    printf("Please enter a number\n");
    scanf("%d", &num);

    while (num > 0)
    {
        int digit = num % 10; // Get the digit
        if (!used[digit]) sum += digit; // Only add if not used already
        used[digit] = 1; // Now we have used it!
        num /= 10;

    }
    printf("%d", sum);
    return 0;
}

随时要求进一步澄清和/或解释。

如果您已经看过,只需阅读每个字符并记录:

#include <stdio.h>
#include <ctype.h>

int
main(void)
{
        int seen[10] = {0};
        int sum = 0;
        int c;
        while( ( c = getchar()) != EOF ) {
                int v = c - '0';
                if( isspace(c)) {
                        continue;
                }
                if( v < 0 || v > 9 ) {
                        fprintf(stderr, "Invalid input\n");
                        return 1;
                }
                if( ! seen[v]++ )
                        sum += v;
        }
        printf("%d\n", sum);
        return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM