C++ 次方数型别的错误纪录 pow()

#我是c++的菜鸟,我想来发文记录一下我的学习#

今天我在写zerogudge 的题目,a040(阿姆斯壮数)的时候发生了很诡异的事情,
当我执行的时候可怕的是就发生了!!

我输入:99 1000 //注解:搜寻99到1000的阿姆斯壮数。

程式输出:370 371 407//注解:99到1000的阿姆斯壮数。

What!! 什么鬼,153到哪里去了??
本因该输出:153 370 371 407的阿~

以下是我发现错误前的程式码

#include <iostream>#include <math.h>using namespace std;int get_length(int x){int leng=0;while(x){x/=10;leng++;}return leng;}int get_sum(int y){    int n=get_length(y);    int sum=0;    for(int i=n;i>0;i--)   {    int single=y/pow(10,i-1);    single =single % 10;    double singlePow=pow(single,n);    sum=singlePow+sum;    }    return sum;    }int main(){    int start;    int end;    int count=0;    cin>>start;    cin>>end;    for(;start<=end;start++)    {        if(get_sum(start)==start)        {            cout<<start<<" ";            count=count+1;        }    }    if(count==0)    {        cout<<"none"<<endl;    }    }

不过后来我把有存pow()这个函式的型别从int改成double就解决这个问题了,
但是为什么会这样我还是不太清楚。

各位高手如有闲情雅致就请帮我解答吧~~


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章