C语言初级—水仙花数

判断一个数是不是水仙花数

基本思想:判断一个数是不是水仙花数,首先要知道什么是水仙花数

我们将一个 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>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值