BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #18620同步于 2009/1/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

sqrt对重载函数的调用不明确

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