首页 > 解决方案 > 计算数字的总和。如果数字重复,不要计算它

问题描述

我的问题是如何在不使用数组的情况下检查数字是否在整数中重复?

例如:123145... 1 重复两次。所以输出应该是 15 (1+2+3+4+5)

我目前的代码是:

# include "stdio.h"
int main () {
  int input = 0;
  int sum = 0;
  int input = 0;
  int sum = 0;

  int digit;

  printf("Please enter a number: ");
  scanf("%d" ,&input);

  while(input > 0) {
    digit = input % 10;

    if(d0 < 1) {
        sum += digit;
        d0 = 1;
    }

    input /= 10;
  }

  printf("Sum of different digits is: %d\n", sum);
  return 0;
}

标签: c

解决方案


这是解决这个问题的一种非常愚蠢的方法,但它既不使用数组也不使用位向量:

#include <stdbool.h>
bool numberHasDigit(unsigned n, unsigned digit) {
  while (n) {
    if (n % 10 == digit) return true;
    n /= 10;
  }
  return false;
}
unsigned sumOfUniqueDigits(unsigned n) {
  unsigned sum = 0;
  for (unsigned digit = 1; digit <= 9; ++digit) {
    if (numberHasDigit(n, digit)) sum += digit;
  }
  return sum;
}

这很愚蠢,因为使用标志的数组(或位向量)要快得多,尤其是对于大数字,而且代码同样简单:

unsigned sumOfUniqueDigits(unsigned n) {
  bool seen[10] = {false};
  unsigned sum = 0;
  while (n) {
    unsigned digit = n % 10;
    if (!seen[digit]) {
      sum += digit;
      seen[digit] = true;
    }
    n = n / 10;
  }
  return sum;
}

推荐阅读