总是说我对重载函数pow调用不明确,我该怎么改?(题目是输出0到输入整数之间的所有2的乘方)

#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
浏览 3824回答 1
1回答

luofuxiang

    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; }运行结果:
打开App,查看更多内容
随时随地看视频慕课网APP