找到小于给定整数的最大有趣数字

时间:2016-10-22 23:08:12

标签: c loops

如果一个数字的翻转数字可以被它包含的数字整除,那么它就很有趣。因此,程序应该从SI读取 n (n> 9)。 查找并打印小于 n 的最大有趣数字。如果输入的数字无效,则应打印"输入无效"。 所以这是我编写的代码,但我无法使用它。 我请求一些帮助。 提前致谢

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, flippedNumber=0, remainder;
    int count = 0, i;
    scanf ("%d", &n);
    int largestInteresting = n;
    while ( n != 0)
    {
        n /= 10;
        ++count;
    }
    while (n > 9)
    {
        for (i = 0; i < n; i++)
        {
            remainder = n%10;                       
            flippedNumber = flippedNumber*10 + remainder;
            n /= 10;
        }
        --largestInteresting;
    }
    if ((flippedNumber % count) == 0 && largestInteresting > i)
        printf ("%d", largestInteresting);
    else
        printf ("Invalid input");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您的代码问题:您有效地销毁n进行数字计数但是然后尝试将其重新用于其他内容而不刷新其值(形式为largestInteresting?);你不会在一个循环中进行有趣的数字检查,这个循环会对输入的数字进行倒计时,所以你永远找不到你要找的东西;在进行有趣的数字测试之前,你要等到循环完成,但是一旦找到第一个有趣的数字,你就不需要完成循环了。

下面我的返工包含了我上面的扭曲解释以及一些风格调整:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int number;

    (void) scanf ("%d", &number);

    if (number < 10)
    {
        fprintf(stderr, "Invalid input\n");
        return EXIT_FAILURE;
    }

    for (int n = number; n > 9; n--)
    {
        int digitCount = 0;
        int temporary = n;

        while (temporary != 0)
        {
            temporary /= 10;
            ++digitCount;
        }

        int flippedNumber = 0;
        temporary = n;

        for (int i = 0; i < digitCount; i++)
        {
            int remainder = temporary % 10;
            flippedNumber = flippedNumber * 10 + remainder;
            temporary /= 10;
        }

        if ((flippedNumber % digitCount) == 0)
        {
            printf("%d\n", n);
            return EXIT_SUCCESS;
        }
    }

    fprintf(stderr, "No interesting numbers found!\n");     
    return EXIT_FAILURE;
}

示例用法

> echo 10 | ./a.out
No interesting numbers found!
> echo 100 | ./a.out
89
> echo 1000 | ./a.out
999
> echo 10000 | ./a.out
8899
> echo 100000 | ./a.out
59999
> echo 1000000 | ./a.out
899997
>