如果一个数字的翻转数字可以被它包含的数字整除,那么它就很有趣。因此,程序应该从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;
}
答案 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
>