返回信息流很简单的求1000以内的完备数(一个数等于它的包括1在内的所有不同因子之和,例如6是完备数,6=1+2+3)的程序,但是编译错误说sqrt对重载函数的调用不明确。我想可能是因为j是int型,而sqrt(i)不是整数,但是强制类型转换依然不对,请大家指教。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
for(int i=1;i<=1000;++i)
{
int result=0;
for(int j=1;j<sqrt(i);++j)
if(i%j==0)
result+=j;
if(result==i)
cout<<i<<endl;;
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #18620同步于 2009/1/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
sqrt对重载函数的调用不明确
yefans
2009/1/13镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
g++ 4.3.2编译正常
【 在 yefans (低调的狼1) 的大作中提到: 】
: 很简单的求1000以内的完备数(一个数等于它的包括1在内的所有不同因子之和,例如6是完备数,6=1+2+3)的程序,但是编译错误说sqrt对重载函数的调用不明确。我想可能是因为j是int型,而sqrt(i)不是整数,但是强制类型转换依然不对,请大家指教。
: #include<iostream>
: #include<cmath>
: ...................
试试sqrt((double)i)或者sqrt(1.0*i)
【 在 yefans (低调的狼1) 的大作中提到: 】
: 很简单的求1000以内的完备数(一个数等于它的包括1在内的所有不同因子之和,例如6是完备数,6=1+2+3)的程序,但是编译错误说sqrt对重载函数的调用不明确。我想可能是因为j是int型,而sqrt(i)不是整数,但是强制类型转换依然不对,请大家指教。
: #include<iostream>
: #include<cmath>
: ...................
因为程序写错了吧
result+=j+i/j;
然后判断result==2*i
补充:还要针对n能开方的特殊情况
【 在 yegle (一阁@SL小分队) 的大作中提到: 】
: 但是运行无结果…what's up?
哦=。=我没看出错误…
【 在 PtwCJ (鲜的每日C|头像不是我,我是长毛贼~~) 的大作中提到: 】
: 因为程序写错了吧
: result+=j+i/j;
: 然后判断result==2*i
: ...................
首先感谢楼上几位热心。
我是在VS2005下调试的,2楼的方法可行。
题意是求所有不相同因子之和,应该是for(int j=1;j<i;++j),j<sqrt(i)是求质数的时候用的判断条件,由于我自己的原因给大家造成麻烦,不好意思。-_-#
经常上这个版块,看到很多热心人,感觉很温暖,再次感谢楼上几位,以后有问题还要向大家请教~~