当前位置:网站首页>C语言初级—水仙花数
C语言初级—水仙花数
2022-08-02 14:03:00 【iccoke】
判断一个数是不是水仙花数
基本思想:判断一个数是不是水仙花数,首先要知道什么是水仙花数
我们将一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身的数称为水仙花数
例如:153=1^3+5^3+3^3
在编写程序之前,我们要了解水仙花数的限制条件
首先水仙花数是一个三位数,即其应该满足100~999
其次就是满足水仙花数的基本特征
得到判断水仙花数的函数体如下
result += (int)pow(i % 10, 3);
i = i / 10;这是水仙花数的判断基本函数体
接下来要完成要求我们还要用函数将其封装起来,依据要求,返回值是正确或者错误
因此我们将函数返回值类型定义为bool类型
得到以下的判断函数体
bool isflower(int num) {
int result = 0;
int i;
bool flag = false;
i = num;
while (i !=0) {
result += (int)pow(i % 10, 3);
i = i / 10;
}
if (result == num)
{
flag = true;
}
return flag;
}其中 i=num;的作用是将num的值记录并保存下来,防止在循环前后使用同一个变量会导致最终的结果产生错误。
在完成函数体后,接下来就是在主函数中调用即可
具体代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
bool isflower(int num) {
int result = 0;
int i;
bool flag = false;
i = num;
while (i !=0) {
result += (int)pow(i % 10, 3);
i = i / 10;
}
if (result == num)
{
flag = true;
}
return flag;
}
int main() {
int num;
printf("请输入一个三位数\n");
scanf("%d", &num);
bool result = isflower(num);
if (result == true) {
printf("这是一个水仙花数\n");
}
else {
printf("这不是一个水仙花数\n");
}
return 0;
}调用函数时用一个与函数返回值相同的值接收函数返回结果
再用选择语句输出结果
我们用153作为测试用例来检验程序正确与否

这里显示153是一个水仙花数
拓展延伸
以此为基础,我们可以设计一个程序,一次输出所有的水仙花数
只需要加上100~999的循环即可
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main(){
int result=0;
int i;
for (int num = 100; num < 1000; num++)
{
i = num;
result = 0;
while (i !=0) {
result += (int)pow(i % 10, 3);
i = i / 10;
}
if (result == num)
{
printf("%d\n", result);
}
}
return 0;
运行程序得到结果

其中涉及头文件#define _CRT_SECURE_NO_WARNINGS的使用
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.(这是在不添加头文件#define _CRT_SECURE_NO_WARNINGS下使用scanf的错误)。
因此根据错误我们选择使用scanf_s代替scanf或者使用头文件
但scanf_s在vs上可以运行,但是换成其它编译器则会出现问题,因此为了方便搬运和代码复用,我们在使用scanf时应加头文件#define _CRT_SECURE_NO_WARNINGS。
pow函数的使用
由于pow函数计算后默认为double类型,因此这里用(int)进行强制转换
其次在用pow等其他数学函数时,头文件因加上#include<math.h>
边栏推荐
- Flask request application context source code analysis
- Unit 12 associated serialization
- Flask-RESTful request response and SQLAlchemy foundation
- [ROS]ROS常用工具介绍(待续)
- PHP open source customer service system _ online customer service source code PHP
- Flask项目的完整创建 七牛云与容联云
- MarkDown syntax summary
- MySQL数据库语法格式
- window10下半自动标注
- Introduction and use of Haystack
猜你喜欢

How does Apache, the world's largest open source foundation, work?
ROS通信 —— 话题(Topic)通信](/img/21/d79f2c4e246eb9ea39df9c7435bb36.png)
[ROS](06)ROS通信 —— 话题(Topic)通信

verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第九章)

yolov5,yolov4,yolov3乱七八糟的

瑞吉外卖笔记——第05讲Redis入门
ROS通信 —— 节点,Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)
[ROS](05)ROS通信 —— 节点,Nodes & Master

【VCU】详解S19文件(S-record)

理解TCP长连接(Keepalive)

Unit 14 Viewsets and Routing
![[ROS] (01) Create ROS workspace](/img/2a/11e5023ef6d052d98b4090d2eea017.png)
[ROS] (01) Create ROS workspace
随机推荐
Haystack的介绍和使用
第七单元 ORM表关系及操作
编程规范——LiteOS
宏定义问题记录day2
Tornado框架路由系统介绍及(IOloop.current().start())启动源码分析
xshell连接虚拟机步骤_建立主机与vm虚拟机的网络连接
redis delay queue
chapter6可视化(不想看版)
瑞吉外卖笔记——第08讲读写分离
我的第一篇博客
【c】小游戏---扫雷雏形
What's wrong with running yolov5 (1) p, r, map are all 0
chapter7
paddle window10环境下使用conda安装
MobileNet ShuffleNet & yolov5替换backbone
MySQL数据库设计规范
Unit 10 Continuous Tuning
Verilog学习 系列
Linux: CentOS 7 install MySQL5.7
跑跑yolov5吧