回 帖 发 新 帖 刷新版面

主题:最近糊涂了,请各位大侠指点一下代码中的红色字体

#include <stdio.h>
#define true 1
#define false 0

int main(void)
{
    bool digit_seen[10] = {false};
    int digit;
    long n;

    printf("Enter a number: ");
    scanf("%ld", &n);

    [color=FF0000]while (n > 0)
    {
        digit = n % 10;
        if (digit_seen[digit])
            break;
        digit_seen[digit] = true;
        n /= 10;
    }[/color]    if (n > 0)
        printf("Repeated digit\n");
    else
        printf("No repeated digit\n");

    return 0;
}

回复列表 (共1个回复)

沙发

楼主跟踪一下就明白了。我来举两个例子,一个Repeated digit,一个No repeated digit
while (n > 0)
    {
        digit = n % 10;
        if (digit_seen[digit])
            break;
        digit_seen[digit] = true;
        n /= 10;
    } 
首先任意整数,如8
进入循环digit = 8,if(digit_seen(8)),因为digit_seen[10] = {false};所以该if语句为假,不执行if语句,。。。。。好好理解一下,继续,digit_seen[8] = true, n = 0;(因为是int型,舍弃了小数点),不符合while(n>0),跳过while语句,执行else,所以是No repeated digit
while (n > 0)
    {
        digit = n % 10;
        if (digit_seen[digit])
            break;
        digit_seen[digit] = true;
        n /= 10;
    } 
继续第二种情况,
取任意整数,如88
进入循环digit = 8,if(digit_seen(8)),因为digit_seen[10] = {false};所以该if语句为假,不执行if语句,digit_seen[8] = true, 记好了,关键在这里,n = 8;(因为是int型,舍弃了小数点),符合while(n>0),再次进入while语句,digit = 8,if(digit_seen(8)),因为digit_seen[8] = true;执行if语句里面的break,break使程序立即跳出while语句,而不会执行while后面的程序,记住此时的n=8所以跳出循环后,执行if语句repeated digit
楼主,我这样解释明白不?

我来回复

您尚未登录,请登录后再回复。点此登录或注册