#include<stdio.h>
#include<math.h>
int main(){
int num,onum,numl=0,tem,nnum=0;
printf("Enter num: ");
scanf("%d", &num);
onum =num;
while (num!=0){
num = num/10;
++numl;
}
num = onum;
while (num!=0){
tem = num%10;
nnum += pow(tem,numl);
printf("%d",nnum);
num /= 10 ;
}
if (nnum == onum){
printf("is");
}
else{
printf("not");
}
}
可以与其他自恋数字一起使用。
此问题与many questions重复。以下答案是最容易理解的答案。
在一句话中,不准确的计算是由{不准确的{数据类型使用}或{编译器}或{FPU}}引起的。
通过将编译器更新为gcc 7.2,我避免错误。但解决问题需要整数的pow函数。
答案 0 :(得分:3)
pow
(在pow(tem,numl)
中)是一个浮点函数。这意味着它返回double
,绑定到浮点不准确和舍入(如果pow
返回124.999999
它对浮点计算没有影响,但它在分配给整数时会这样做,因为截断)
因此,依赖pow
的返回值可能有效,或者可能无效(取决于值,FPU,编译器数学库)。事实上&#34;有时它会发出微微的价值&#34;是浮点不准确问题的赠品。
由于您只使用整数,我会使用整数取幂,或者使用简单循环或使用更复杂的算法(The most efficient way to implement an integer based power function pow(int, int))