我的试卷中给出了以下 C 代码,它告诉输入的数字中是否有重复的数字
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool digit_seen[10] = {false};
int digit;
long n;
printf("Enter a number: ");
scanf("%ld", &n);
while (n > 0 ) {
digit = n%10;
if (digit_seen[digit])
break;
digit_seen[digit] = true;
n /= 10;
}
if (n>0)
printf("Repeated digit\n");
else
printf("No repeated dgit\n");
return 0;
}
好吧,问题是我不知道它是如何工作的。据我所知,它只是通过 digit = n%10 计算余数,没有别的。]
谁能告诉我它是如何工作的
谢谢阿卡什
编辑:好的,我将这部分代码编辑为以下内容
if (n>0)
printf("Repeated digit: %d\n", digit);
else
printf("No repeated dgit\n");
所以现在它也打印重复的数字,但我遇到了一个很奇怪的问题。
如果我输入的数字超过 10 个数字,要么打印出错误的输出,要么打印出没有重复的数字。
我认为数组 digit_seen[10] = {false} 可能有问题所以我将它的长度增加到 20 但后来我也面临同样的问题 谁能解释为什么会这样
谢谢阿卡什
最佳答案
得到 (n/10) 的余数。这是“一”处的数字。
digit = n%10;
检查数字对应的数组中的位置是否为真。 如果是,跳出循环;该数字已被多次看到。
if (digit_seen[digit])
break;
将数组中数字对应的位置标记为true
digit_seen[digit] = true;
将“n”除以 10,使“12345”变为“1234”。 当“n”为个位数时,这将变为“0”,满足循环条件。
n /= 10;
循环后,如果n
不等于0,则提前退出循环,找到单个数字的倍数。
关于c - 这段 C 代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439817/