妈蛋这个坑了我大半个小时都想不出个原因。。后来看到pow的定义才想起,数据类型很重要啊。。
1.底数用常量,指数用整型
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 int i,j; 6 for(i=0;i<9;i++) 7 { 8 j=pow(10,i); 9 printf("%d\n",j); 10 } 11 return 0; 12 }
运行结果:
1
10
99
1000
9999
100000
1000000
9999999
99999999
答案不是1000下去而是出现了9999999,一开始百撕不得其姐。。
看到定义后改用如下
2.底数用常量,指数用double
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double i,j; 6 for(i=0;i<9;i++) 7 { 8 j=pow(10,i); 9 printf("%.0lf\n",j); 10 } 11 return 0; 12 }
运行结果:
1
10
100
1000
10000
100000
1000000
10000000
100000000
改用double就没事了
那么指数用常量呢
3.底数用常量,指数用常量
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double i; 6 i=pow(10,3);printf("%.0lf\n",i); 7 i=pow(10,4);printf("%.0lf\n",i); 8 return 0; 9 }
运行结果:
1000
10000
可见,指数用常量也是没问题的
经过n次测试,原因找出来了
再看另一组数据:
1.指数用int,pow值赋给int,结果错误
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double d; 6 int p,i=9; 7 p=pow(10,i); 8 printf("%d\n",p); 9 return 0; 10 }
运行结果:
999999999
2.指数用常量,pow值赋给int,结果正确
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double d; 6 int p,i=9; 7 p=pow(10,9); 8 printf("%d\n",p); 9 return 0; 10 }
运行结果:
1000000000
3.指数用常量,pow值赋给double,结果正确
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double d,p; 6 p=pow(10,9); 7 printf("%.0lf\n",p); 8 return 0; 9 }
运行结果:
1000000000
4.指数用int,pow值赋给double,结果正确
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double d,p; 6 int i=9; 7 p=pow(10,i); 8 printf("%.0lf\n",p); 9 return 0; 10 }
运行结果:
1000000000
5.指数用double,pow值赋给int,结果错误
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double d,i=9; 6 int p; 7 p=pow(10,i); 8 printf("%d\n",p); 9 return 0; 10 }
运行结果:
999999999
从数据看出
pow赋值给int的时候:指数用常量,结果正确;指数用int、double,结果错误
pow赋值给double的时候,指数用常量、int、double,结果都正确
结论,指数用什么类型无关紧要,重要的是pow的值要赋给一个double型变量。