我正在解决一些在线数学测试,并认为找到解决方案并将其放在devc ++的程序中太难了,我应该有
153,370,371,407,
但缺少solution 407.
以下是问题:数字153
有一个有趣的属性。换句话说,它等于其数字立方体的总和:
13 + 53 + 33 = 153
370是另一个具有相同属性的数字。还有另外两个三位数的自然数,三个不同的数字,都小于500,具有相同的属性。找到他们。 这是我的程序
#include<iostream.h>
#include<math.h>
using namespace std;
int main() {
int i,nr,a,b,c;
for(i=100;i<=500;i++) {
nr=i;
c=i%10;
b=i/10%10;
a=i/10/10;
if((pow(a,3)+pow(b,3)+pow(c,3))==nr) cout<<nr<<endl;
}
system("pause");
}
答案 0 :(得分:1)
或许pow
返回double
会导致浮点不准确。
相反,请尝试
if(a*a*a + b*b*b + c*c*c == nr)
cout ....
答案 1 :(得分:1)
([编辑]已解决,因为。主要是从部分代码中猜测问题,因为此时问题格式非常严格,并且由于某种原因而无法编辑。)
浮点计算并不总是精确的,并且通常不建议比较浮点值是否相等。
到目前为止,替换
if((pow(a,3)+pow(b,3)+pow(c,3))==nr)
与
if((a*a*a + b*b*b + c*c*c) == nr)
答案 2 :(得分:0)
当我运行该程序时,我得到了这4个答案。
pow
永远假设不够精确,无法在这个琐碎的测试中进行任何舍入。
但似乎有关于SO的问题倾向于将c标头拉入C ++并使用system("pause");
使用pow
的版本,其严重程度低于它应该是的。所以前两个答案(建议不使用pow
的方法)可能是有效的。但只是因为你的数学库出了问题,而不是因为pow
的有效副本变坏了。
所以你可以找到一个更好的C ++环境或更好的数学标题,或者你可以围绕你的pow
但是,如果这不能解决问题,那么接下来要怀疑的是endl
在pause
之前无法正常工作。也许你看到一些输出缓冲问题。无论如何,我很确定代码很好(甚至使用pow
),问题出在数学或I / O库函数中。