为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C C++
叫什么名字好呢1 2016-07-27 16:23:38
#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;
}

运行结果:

//img1.sycdn.imooc.com//5798a1fb000107d406440192.jpg


查看完整回答
反对 回复 2016-07-27
  • 叫什么名字好呢1
    叫什么名字好呢1
    能不能只把返回值强制转换呢?num是输入的整数,我觉得没必要定义为double型啊!
  • luofuxiang
    luofuxiang
    可以,但是在pow参数那里也还需要将int类型装换成double,尽管int转double可以由编译器自动完成,但有些编译器会报一个警告。
  • 叫什么名字好呢1
    叫什么名字好呢1
    这样啊,我知道了,真是谢谢了
  • 1 回答
  • 0 关注
  • 3815 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信