求大神看看关于求水仙花数的c++程序
#include<iostream>#include<cmath>
int main()
{
int st1;
int num=100;
int sum , i;
for(auto &it: st1) //创建数组 存放所有的三位数
{
it = num;
num++;
}
for(auto it: st1)
{
sum = 0;
num = it;
while(num)
{
sum+=pow(num%10 , 3);
num = (int)(num/10);
}
if(sum == it)
std::cout<<it<<" . ";
}
return 0;
}
计算出的结果只有三个结果 370, 371, 407 怎么少了一个153呢
求大神帮忙看看 就是这样子 答案其实很简单,就是pow函数是进行浮点运算的,换句话说,十进制用二进制进行运算,最后总会有误差的。
解决方法就是对pow的结果做一下修正,用round函数直接四舍五入保留整数部分转为int。
sum+=pow(num%10 , 3);
修正为:
sum+=(int)round(pow(num%10 , 3));
另外,round函数也可能并非很好,据说是有几率问题,也可以试下这种写法:
sum += (int)(pow(num%10 , 3)+0.5);
总之,问题就在于pow函数是浮点型的运算。
{:10_266:}
页:
[1]