在以下代码中
#include <stdio.h>
#define MAX 1000000000
int main()
{
int n,temp,prod,i;
scanf("%d",&n);
for(i=1;i<MAX;i++)
{
temp=i;
prod=1;
while(temp!=0)
{
prod=prod*(temp%10);
temp=temp/10;
}
if(prod==n)
{
printf("%d",i);
break;
}
}
return 0;
}
代码正在运行。我需要输入一个数字N并找到最小的整数Q,使其数字的乘积为N.例如,如果N = 10
,则Q = 25
。如果没有这样的数字Q,我需要输出-1。在if
代码条之后放置以下代码条,为所有输入提供-1
else
{
printf("-1");
break;
}
我做错了什么?
答案 0 :(得分:1)
如果你将else
块放在循环中,那么只要任何单个猜测失败就会触发它。您希望在所有猜测失败后触发它。这意味着,在您尝试了所有数字并发现所有数字都是错误之后,-1
打印输出需要在循环之外。
但这意味着您无法使用else
块。你需要使用别的东西。如何检测循环是否失败?一种常见的方法是使用变量来跟踪循环是成功还是失败。例如,在循环开始之前设置found = 0
,在找到匹配集if
时在found = 1
语句内设置。然后在循环结束后,检查found
的值。如果它仍然是0
,那么您没有找到匹配项,可以输出-1
。
int found = 0;
for (i = 1; i < MAX; i++)
{
// ...
if (prod == n)
{
printf("%d\n", i);
found = 1;
break;
}
}
if (found == 0) // could also be written: if (!found)
{
printf("-1\n");
}
答案 1 :(得分:1)
当i == 1时会发生什么?你计算prod = 1.除非n = 1,if-condition为false,你打印-1并退出循环。
虽然好的问题。如果n = 1,000,000,000,您将如何找到解决方案?
答案 2 :(得分:0)
最好是找到N的一位数因子,看看哪种产品组合最小。