当前位置:网站首页>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框架深入一
8576 顺序线性表的基本操作
MarkDown语法汇总
IDEA打包jar包
redis延时队列
c语言用scanf出错不安全的解决办法
[ROS] Compiling packages packages encounters slow progress or stuck, use swap
8576 Basic operations of sequential linear tables
动手学ocr(一)
The specific operation process of cloud GPU (Hengyuan cloud) training
drf serializer - Serializer
How does Apache, the world's largest open source foundation, work?
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十章)
Deep learning framework pytorch rapid development and actual combat chapter4
MarkDown syntax summary
Unit 11 Serializers
Chapter6 visualization (don't want to see the version)
[ROS] (05) ROS Communication - Node, Nodes & Master
[ROS] (04) Detailed explanation of package.xml
YOLOv7使用云GPU训练自己的数据集