找到数字乘积为N的最小数字Q.

时间:2015-04-13 23:35:45

标签: c

在以下代码中

#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;
}

我做错了什么?

3 个答案:

答案 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的一位数因子,看看哪种产品组合最小。