找到小于给定整数的最大有趣数字
Posted
技术标签:
【中文标题】找到小于给定整数的最大有趣数字【英文标题】:Find the largest interesting number smaller than a given integer 【发布时间】:2017-03-05 00:28:59 【问题描述】:如果翻转后的数字可以被它所包含的位数整除,那么它就会很有趣。所以程序应该从 SI 中读取一个 ingeter 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;
【问题讨论】:
这是什么作用?有一件事是你的第一个while循环一直运行到n == 0
,而你的第二个循环永远不会运行,因为n
永远不会大于9
。
当发布的代码运行时,用户会看到一个闪烁的光标,并且没有指示用户下一步应该做什么。建议每次用户需要输入任何内容时输出一个提示。该提示应该告诉用户输入的范围和类型。
在第一个while()
循环结束时,'n'将为0。那么第二个while()
循环将永远不会进入。
为了便于阅读和理解: 1) 变量名应该指示用法或内容(或者更好,两者兼有)。 2) 遵循公理:每行只有一个语句,并且(最多)每条语句有一个变量声明。 3) 单独的代码块(for、if、else、while、do...while、switch , case, default) 通过一个空行。
在调用任何scanf()
系列函数时,始终检查返回值(而不是参数值)以确保操作成功。
【参考方案1】:
您的代码存在问题:您有效地破坏了n
进行数字计数,但随后尝试将其重用于其他用途而不刷新其值(形成最大的有趣?);您不会在循环中对输入数字进行倒数计数,因此您永远找不到所需的数字;等到循环完成后再进行有趣的数字测试,但如果你倒计时,一旦找到第一个有趣的数字,就不需要完成循环。
我下面的返工结合了我上面的扭曲解释以及一些风格调整:
#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
>
【讨论】:
以上是关于找到小于给定整数的最大有趣数字的主要内容,如果未能解决你的问题,请参考以下文章