#include <stdio.h>#include <math.h> int main (){ unsigned long num; unsigned long value=0;//2的n次方的值 size_t number_pow=0;//指数幂 printf("请输入一个正整数:"); scanf("%1d",&num); while (value<=num) //2的n次方大于number时循环停止 { value=pow(2,number_pow++); //调用数学函数pow if (value<num) { printf("小于%1d的所有2的乘方为%1d \n",num,value); } } return 0;}
1 回答
已采纳
luofuxiang
TA贡献34条经验 获得超34个赞
pow的函数原型为double pow(double x,double y);所以楼主定义的num应该为double类型,返回值可以强制转换为long unsigned int 类型(即unsigned long类型),然后输出结果,输出double类型的格式化输出符号为“%lf”,unsigned long 类型格式化输出符号为“%ld”,这里我发现楼主写的是“%1d”。
下面代码是我根据楼主的代码稍微做了一下修改,已经用调试运行过。
源代码:
#include <stdio.h> #include <math.h> int main () { double num; unsigned long value=0;//2的n次方的值 size_t number_pow=0;//指数幂 printf("请输入一个正整数:"); scanf("%lf",&num); while (value<=num) //2的n次方大于number时循环停止 { value=(long unsigned int)pow(2,number_pow++); //调用数学函数pow if (value<num) { printf("小于%.0lf的2的乘方有%ld \n",num,value); } } return 0; }
运行结果:
- 1 回答
- 0 关注
- 3823 浏览
添加回答
举报
0/150
提交
取消