由于花费大量时间,代码无法执行

时间:2019-07-30 02:53:39

标签: c++ dev-c++

输入n,m 我写了这段代码,它将找到最小的数字,使得 没有。将被n整除 和它的数字总和= m 但它没有执行,花费了太多时间并且没有显示任何输出

我试图将i从n + 1运行到INT_MAX,但没有任何作用

#include <iostream>
#include<climits>
#include<stdio.h>
using namespace std;
int main()
{
    int n, m, a;
    cin >> n >> m;
    for (int i = n + 1; i < INT_MAX; i++)
    {
        a = 0;
        if (i % n == 0)
        {
            while (i > 0)
            {
                a += i % 10;
                i = i / 10;
            }
            if (a == m)
            {
                cout << a;
                break;
            }
        }
        if (a == m)
            break;
    }
}

我希望输出是一些数字,但是什么也没显示

2 个答案:

答案 0 :(得分:0)

****编辑

在您的循环中,我在每个循环中先递增1,然后再除以10,因此它永远不会真正增加,也不是a,因此它永远不会达到命中率,并且陷入了接近正0的循环中

答案 1 :(得分:0)

不要在while循环中使用i,因为您已经在for循环中使用了i。每次执行while循环时,在while循环中使用i将其值减小i / 10倍。而是使用任何其他局部变量。

#include <iostream>
#include<climits>
#include<stdio.h>
using namespace std;
int main()
{
   int n, m, a;
   cin >> n >> m;
   for (int i = n + 1; i < INT_MAX; i++)
   {
       a = 0;
       if (i % n == 0)
       {
           int temp = i;
           while (temp > 0)
           {
               a += temp % 10;
               temp = temp / 10;
           }
           if (a == m)
           {
               cout << a;
               break;
           }
       }
       if (a == m)
           break;
   }
  return 0;
}