输入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;
}
}
我希望输出是一些数字,但是什么也没显示
答案 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;
}