C语言实现-水仙花数中的pow(5, 3) = 124 的问题
/*
Description
输出所有的水仙花数。所谓水仙花数是一个3位的正整数,其各位数字的立方和等于这个数本身。
例如,153是水仙花数,因为1^3+5^3+3^3=153。 ^代表上标
输入格式
无
输出格式
一行一个,由小到大输出所有水仙花数
*/# include <stdio.h>
# include <math.h>int main()
{int i, j, k, l;int sum = 0;for (i = 100; i <= 999; i++,sum = 0){for (j = i; j != 0; j /= 10){k = j % 10;/*研究该关键行代码*/sum = sum + pow(k, 3);//如果把pow(k, 3)转换为float或double或者把 整个表达式强制转换成int类型 则不会出现问题/*也可改成:k = j % 10;l = k * k * k;sum += k*k*k;*//*查看代码执行过程,发现一到含有5的数字就出问题,可以查看执行结果为水仙花数i = 153或 i = 155的那行代码的输出结果已知:pow()函数是用float单精度浮点型进行计算的,返回值为float类型;如果用%d 输出,则会出现精度丢失,返回值为0问题:但是为什么会出现pow(5^3)==124这种情况呢,可查看执行结果为水仙花数i = 153或 i = 155的那行代码的输出结果*/printf(" i = %d,j = %d, k = %d, sum = %d\n",i, j, k, sum);//if (sum > i){break;}}if (i == sum){printf("%d\n", i);}}return 0;
}
在codeblocks中,上述代码输出结果:
查看代码执行过程,发现一到含有5的数字就出问题,可以查看执行结果为水仙花数i = 153或 i = 155的那行代码的输出结果
/* 已解决的疑问1和疑问2:
如果把一个浮点数赋值给整型变量,则会截断小数部分,只保留整数部分
pow()函数是把数据转换成float单精度浮点型进行计算的,如果用%d 输出,则会出现精度丢失,输出0;
//上述疑问1和疑问2的测试程序:
# include <stdio.h>
# include <math.h>int main()
{int i = 5;double j = pow(5, 3);double k = 2.22;int l = k;printf("用%%d输出整型数据:i = %d\n\n",i);printf("用%%d输出pow(5,3)函数:j = %d\n\n", j);printf("用%%f输出pow(5,3)函数:j = %f\n\n", j);printf("截断浮点型数据 %lf 的小数部分并输出:l = %d\n", k, l);return 0;
}
上述代码,在codeblocks中的输出结果:
已解决疑问:
- pow()函数在水仙花数中为何会出现 : k = 5; pow(k, 3) = 124
//疑问3的测试程序:
# include <stdio.h>
# include <math.h>int main(){int k;int j = 0;int sum = 0;k = 5;sum = pow(k, 3);j = pow(5, 3);printf("k = %d, sum = %d, j = %d\n", k, sum, j);return 0;}
在codeblocks中的输出结果:
在Dev-C++中输出的结果:
在Visual Studio 2019中输出的结果:
原因:
由于编译器和编译环境的差异,仅在codeblocks编译器中会出现 k = 5; pow(k,3) = 124 的问题,而在Dev-C++和VS2019中不会出现该问题,并且该水仙花程序在OJ中能正确得出 pow(k, 3) = 125 并且 AC
C语言实现-水仙花数中的pow(5, 3) = 124 的问题相关推荐
- 水仙花数c语言程序解析,C语言求水仙花数代码解析
原标题:C语言求水仙花数代码解析 水仙花数 "水仙花数"又称为"阿姆斯特朗数".如果一个n(n≥3)位数的各位数字的n次幂之和等于该数本身,则该数称为" ...
- C语言求水仙花数(自幂数)
C语言求水仙花数 什么是水仙花数 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身.例如:1^3 + 5^3+ 3^3 = 153 函数实现 代码如下: #define _CRT ...
- c语言如何水仙花数,c语言如何解水仙花数
c语言解水仙花数的方法:首先按[CTRL+N]新建一个源代码:然后输入水仙花数的源代码:接着按[F9]进行编译:最后显示无错误后按[F10]运行即可. c语言解水仙花数的方法: 1.首先什么是水仙花数 ...
- 如何用C语言完成水仙花数的搜索
如何用C语言完成水仙花数的搜索 概念讲解: 什么是水仙花数呢? 所谓的水仙花数是指:一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身. 例如153,370,371等都是水仙花数, ...
- 打印出所有的水仙花数javascript_期末C语言特辑 水仙花数
点击蓝字 关注我们 期末C语言特辑 水仙花数 [问题描述]水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PP ...
- 【C语言编程--水仙花数II】
水仙花数II 前言 一.题目 二.使用步骤 1. 思路 2. 三位数求各个位数 3. 判断是否为水仙花数 三.具体实现 前言 用C语言实现水仙花数II 一.题目 请判断一个数是不是水仙花数.其中水仙花 ...
- C语言:水仙花数(daffodil),求出三位数中所有水仙花数
水仙花数(C语言) 文章目录 水仙花数(C语言) 前言 一.题目 二.解题思路 代码 运行结果 总结 ***根据水仙花数满足的条件找出需要求的对象,这里是各位上的位数.*** 前言 刘汝佳算法书< ...
- c语言将水仙花数放入一维数组a中,全国计算机等级考试C语言考试程序设计题(13)...
在考生目录下,要求程序PROG.C的功能是:将所有的水仙花数保存到一维数组a中. (所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身. 例如:153=1*1*1+5*5*5+3*3*3) #i ...
- c语言将水仙花数放入一维数组a中,C语言考试题库及答案(1)
10.在考生文件夹下,要求程序PROG.C的功能是: 求[m,n]之间既不能被7整除也不能被5整除的整数之和,m和n的值由键盘输入. 例如,如果m和n的值分别为10和20,则计算结果为:106. #i ...
最新文章
- Python简单主机批量管理工具
- 【CyberSecurityLearning 42】日志记录规则
- python字符串转化为long_Java带有运算符的字符串转换为Long型
- jzoj4050-寻宝游戏【二分,树状数组,LCA】
- C++ setw和setfill
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
- 【新手教程】CE找武林外传基址方法
- Java 线程——Timer TimerTask
- php json 存储数据格式,文件存储(一):通过 JSON 格式序列化文本数据
- 简述74HC595功能
- 基于java写的雷霆战机
- Android 实现搜索历史(1)
- JS CSS 超出字符省略号,获取字符串实际所占长度,显示文字提示tooltip
- 数据挖掘(二)预测潜在贷款发放客户
- 权限系统--前后端完全分离
- 离散数学复习笔记——命题逻辑——永真蕴含式
- 通过例子进阶学习C++(四)计算2的64次方,不服写写看
- window驱动下载
- JBPM 3.2.2动态修改duedate
- Spring—拦截器和过滤器介绍