C语言编程水仙花数

文章介绍了如何使用C语言编写程序寻找100到999之间的水仙花数,即各位数字立方和等于其本身的三位数。通过for循环遍历范围,结合求模运算拆分数字的个位、十位和百位,然后使用if语句判断是否满足水仙花数的条件。此外,还提到了利用pow函数优化代码,提高可读性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

要写水仙花数的C语言程序,就要搞清楚什么是水仙花数。
水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身
例如:1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153。

明白了概念,那么就来简单搭建框架,写该程序时我们需要用到两个重要知识点。

  1. 使用for循环来寻找水仙花数
  2. 使用if语句来判断是否是水仙花数

1、使用for循环寻找水仙花数

找到突破口后我们就可以开始构思思路了,之前已经知道了水仙花数是每个位上的三次幂之和,那么我们需要找出并确定每个位上的数值。最好用的方法就是使用求模进行拆分

例如:

ge = i % 10;//个位求模取余
shi = i / 10 % 10;//十位除以十后取余
bai = i / 100 % 10;//百位除以百后取余

取得每位上的得数后,就可以利用for循环开始判断了,代码如下:

for (int i = 100; i < 1000; i++)
{
	语句块
}

以上代码为:
定义一个整数类型的变量 i ,其初始值为100,当 i 小于1000这个条件成立时,运行语句块中的内容,运行之后再把 i 的值加1,然后再次重复运行,一直循环到 i 大于等于1000时停止(因为水仙花数是三位数,因此我们只需要在三位数中寻找即可)。

接下来让我们把语句块中的内容替换成之前写好的每位拆分求模:

for (int i = 100; i < 1000; i++)
{
	ge=n%10;//个位求模取余
	shi=n/10%10;//十位除以十后取余
	bai=n/100%10;//百位除以百后取余
}

这样,就算完成了第一步,用for循环寻找水仙花数。

2、使用if语句来判断是否是水仙花数

之前已经说过水仙花数是每位上的三次幂之和,那么可以写成这样:

i == a * a * a + b * b * b + c * c * c

注意,两个等号在一起才是判断是否相等,单个的等号是赋值,在这点上偶有人会犯错。
将其放入if语句中的框架就变成这样:

if (i == (ge * ge * ge + shi * shi * shi + bai * bai * bai))//为了预防可能出错,推荐加上括号
		{
			printf("%-5d", i);//%-5d指定输出数据的域宽为5列,负号表示左对齐
		}

接下里我们就可以进行组合了,因为需要不断判断是否为水仙花数,所以 if 语句应该包含在 for 循环中:

for (int i = 100; i < 1000; i++)
	{
		ge = i % 10;
		shi = i / 10 % 10;
		bai = i / 100 % 10;
		if (i == (ge * ge * ge + shi * shi * shi + bai * bai * bai))
		{
			printf("%-5d", i);
		}
	}	

接下来让我们加上基础框架和一些修饰让代码片成为完整的程序:

#include<stdio.h>
int main() {
	int ge, shi, bai ;
	printf("水仙花数为:\n");
	for (int i = 100; i < 1000; i++)
	{
		ge = i % 10;
		shi = i / 10 % 10;
		bai = i / 100 % 10;
		if (i == (ge * ge * ge + shi * shi * shi + bai * bai * bai))
		{
			printf("%-5d", i);
		}
	}	
	return 0;
}

最后输出结果为:
输出结果

3、小拓展

关于三次幂那部分如果遇上了需要解决更高次幂的问题就会显得很复杂繁琐,因为你要让多少个相同的数据相乘啊,所以我们还可以利用C语言中的另外一种函数, pow函数来帮助我们优化上面的代码。

下面是 pow() 函数的声明。

double pow(double x, double y)

双精度浮点型的变量pow,x 代表基数的浮点值,y 代表指数的浮点值。
该函数返回 x 的 y 次幂的结果。
上一个直观例子:

#include <stdio.h>
#include <math.h>//使用前要加上头文件

int main ()
{
   printf("值 2.0 ^ 3 = %lf\n", pow(2.0, 3));   //意为2.0的3次幂
   return 0;
}

输出结果为:
在这里插入图片描述

因此以下代码可以优化:

if (i == (ge * ge * ge + shi * shi * shi + bai * bai * bai))
		{
			printf("%-5d", i);
		}

优化后:

if (i == (pow(ge, 3) + pow(shi, 3) + pow(bai, 3)))
		{
			printf("%-5d", i);
		}

是不是看起来更专业便捷了呢?
完整程序:

#include<stdio.h>
#include<math.h>
int main() {
	int ge, shi, bai;
	printf("水仙花数为:\n");
	for (int i = 100;i < 1000;i++)
	{
		ge = i % 10;
		shi = i / 10 % 10;
		bai = i / 100 % 10;
		if (i == (pow(ge, 3) + pow(shi, 3) + pow(bai, 3)))
		{
			printf("%-5d", i);
		}
	}

	return 0;
}

输出结果:
优化后输出
以上便是关于C语言编程水仙花数的全部内容了,如有漏洞欢迎大家指出。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值