由于花费大量时间,代码未执行
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 < 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 < INT_MAX; i+=n)
消除了对if (i % n == 0)
的需要。测试n
s 之间的任何值毫无意义,因为它们会自动失败。最终,虽然我很确定有一种方法可以将问题分解为一个等式。【参考方案2】:
**** 编辑
在你的循环中 i 在每个循环中增加 1 然后除以 10 ,因此它永远不会真正增加,a 也不是,所以它永远不会达到命中并且卡在接近正 0 的循环中
【讨论】:
以上是关于由于花费大量时间,代码未执行的主要内容,如果未能解决你的问题,请参考以下文章
在 EF6 中执行 StoredProcedure 需要花费大量时间