前言
要写水仙花数的C语言程序,就要搞清楚什么是水仙花数。
水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身。
例如:1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153。
明白了概念,那么就来简单搭建框架,写该程序时我们需要用到两个重要知识点。
- 使用for循环来寻找水仙花数
- 使用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语言编程水仙花数的全部内容了,如有漏洞欢迎大家指出。