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

Posted

技术标签:

【中文标题】由于花费大量时间,代码未执行【英文标题】:code not executing due to huge time taken 【发布时间】:2019-07-30 02:53:39 【问题描述】:

输入 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;
    

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

【问题讨论】:

您使用的输入是什么?你对输出有什么期望?您是否在调试器中单步执行过代码? i = i / 10; 看起来很糟糕,因为这里也使用了i for (int i = n + 1; i &lt; INT_MAX; i++) 为什么你把 if 条件 (a == m) 放在第二位?? 【参考方案1】:

不要在 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;

【讨论】:

另一项改进:for (int i = n; i &lt; INT_MAX; i+=n) 消除了对if (i % n == 0) 的需要。测试ns 之间的任何值毫无意义,因为它们会自动失败。最终,虽然我很确定有一种方法可以将问题分解为一个等式。【参考方案2】:

**** 编辑

在你的循环中 i 在每个循环中增加 1 然后除以 10 ,因此它永远不会真正增加,a 也不是,所以它永远不会达到命中并且卡在接近正 0 的循环中

【讨论】:

以上是关于由于花费大量时间,代码未执行的主要内容,如果未能解决你的问题,请参考以下文章

在 EF6 中执行 StoredProcedure 需要花费大量时间

加密的核心数据在删除 40 万多条记录时需要花费大量时间

花费大量时间来构建 gradle

由于堆内存已满,jUnits 花费的时间太长

SpriteKit 游戏在 AppDelegate 中花费大量时间

花费太多时间处理大量数字