当前位置:网站首页>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>
边栏推荐
猜你喜欢
[ROS] (06) ROS Communication - Topic Communication
MobileNet ShuffleNet & yolov5 replace backbone
The 2nd China Rust Developers Conference (RustChinaConf 2021~2022) Online Conference Officially Opens Registration
【c】小游戏---五子棋之井字棋雏形
初识c语言指针
yolov5,yolov4,yolov3 mess
猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)
STM32 (F407) - stack
St. Regis Takeaway Notes - Lecture 10 Swagger
【VCU】详解S19文件(S-record)
随机推荐
Unit 13 Mixing in View Base Classes
【c】大学生在校学习c语言常见代码
[ROS] The difference between roscd and cd
Unit 10 Continuous Tuning
St. Regis Takeaway Notes - Lecture 10 Swagger
Unit 11 Serializers
IDEA打包jar包
drf路由组件Routers
浅浅写一下PPOCRLabel的使用及体验
【ROS】编译软件包packages遇到进度缓慢或卡死,使用swap
chapter7
跑跑yolov5吧
The specific operation process of cloud GPU (Hengyuan cloud) training
Flask框架深入二
第十单元 前后连调
xshell连接虚拟机步骤_建立主机与vm虚拟机的网络连接
c语言三子棋详解!!! (电脑智能下棋)(附上完整代码)
[ROS] (06) ROS Communication - Topic Communication
drf view component
8583 顺序栈的基本操作