首页 > 解决方案 > 为什么我没有得到正确的输出

问题描述

好的,所以对于我的问题,一个神奇的数字定义如下:如果它的每个数字都大于该数字右侧的数字之和。例如 94210 9 > 4+2+1+0 4 >2+1+0 等等...我看不到我的代码的问题,但我没有得到正确的输出

    #include <stdio.h>
void Magic_number(int left, int right, int digit) {

    int remainder;
    for (; left < right; left++) {
        int flag = 1; int sum = 0; int y = left;
        remainder = y % 10; y = y / 10;
        sum += remainder;
        while (y != 0 && flag)
        {
            if (remainder == digit)
                flag = 0;
            if (remainder < sum)
                flag = 0;
            y = y / 10;
            remainder = y % 10;
            sum += remainder;
        }
        if (y == 0 && flag) {
            printf("%d ", left);
        }

    }
    }
    int main() {
    int l, r, d;
    printf("please enter the right bound \n");
    scanf_s("%d", &r);

    printf("please enter the left bound \n");
    scanf_s("%d", &l);
    while (l>r)
    {
        printf("please enter the left bound that is less than the right bound \n");
        scanf_s("%d", &l);
    }
    printf("please enter the arbitrary digit\n");
    scanf_s("%d", &d);
    printf("the Magic numbers from left bound%d  and the right bound %d while exluding %d\n", l, r, d);
    Magic_number(l, r, d);
}
expected output
magic number in rande left=740 right 850 with excluding digit m=2
740 741 750 751 760 810 830 831 840 841 843 850

the output I get 
740 750 760 770 780 790 800 810 820 830 840

标签: cmath

解决方案


您的代码中有许多错误。 y = y / 10;一个示例是在计算余数之前执行的循环内。由于您已经在循环之前除以 10,因此您实际上跳过了一个数字。此外,还有一些地方你做<而不是<=

试试看:

void Magic_number(int left, int right, int digit) 
{
    int remainder;
    for (; left <= right; left++) {
        int flag = 1; int sum = 0; int y = left;
        
        remainder = y % 10;      // Get first digit
        y = y / 10;              // Update y
        sum += remainder;        // Update sum
        if (remainder == digit)  // Check if first digit must be skipped
            flag = 0;
            
        while (y != 0 && flag)
        {
            remainder = y % 10;     // Get next digit
            y = y / 10;             // Update y
            if (remainder == digit) // Check if current digit must be skipped
                flag = 0;
            if (remainder <= sum)   // Check if current digit is higher than current sum
                flag = 0;
            sum += remainder;       // Update sum
        }
        if (y == 0 && flag) {
            printf("%d ", left);
        }

    }
}

推荐阅读