当数字在数字中出现两次时打开标志 - C

Turn the flag on when the digits shows twice in a number - C

不使用数组.. 如果一个数字中有两次或更多次相同的数字,我如何设法将标志从 1 变为 0?

当它们都是整数时,temp和temp2是同一个数字,是一个4位数字

for(i = 0; i < 4; i++) //if a digits shows twice
{
    n = temp % 10;
    for(k = 0; k <= 6; k++)
    {
        if(n == temp2 % 10)
        {
            counter++;
        }
        temp2 /= 10;
    }
    temp /= 10;
    if(counter > 1)
    {
        flag = 0;
    }
    counter = 0;
}

结果是它不起作用..有些东西不起作用

您取最低有效位并检查它是否出现在数字的其余部分中。如果找到,您就完成了。如果找不到,则将数字除以 10 并重复该过程。示例:

 n = 123456789;
 step 1: Is 9 present in 12345678
 step 2: Is 8 present in 1234567
 step 3: Is 7 present in 123456
 .. and so on ..

所以首先你要写一个函数来判断一个数字是否包含一个特定的数字。该函数可能如下所示:

int contains_digit(int number, int digit)
{
  while(number)
  {
    if ((number % 10) == digit) return 0;  // Return zero when found
    number /= 10;
  }
  return 1; // Return one if not found
}

然后您为原始数字中的所有数字调用该函数并测试该数字除以 10 的数字。例如,如果数字是 1234,您调用函数如下:

contains_digit(123, 4)
contains_digit(12, 3)
contains_digit(1, 2)

可以是这样的:

int main( void )
{
  int n = 12434;
  int flag = 1;
  while(n && flag)
  {
    flag = contains_digit(n/10, n % 10);
    n /= 10;
  }

  printf("flag is %d\n", flag);
  return 0;
}