基于基础c语言的水仙花数编程方法

基于基础c语言的水仙花数编程方法

首先,什么是水仙花数?
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

那么,如何用基础的c语言语句来编写一个能够实现3~7位的水仙花数的输出呢?

这边,我们需要用到几个简单的循环语句。

下面进行水仙花数基于c语言简单循环语句的编写。

思路
将程序大致分为两个模块,一个模块确定数的范围,一个模块用来遍历寻找水仙花数。

方法
1.确定程序输出的水仙花数的数值范围,比如我需要实现一个3位数水仙花数的输出,那么,我们的数值范围就是100~999

for (i = 1; i < n; i++) {
first *= 10;
}
printf(“%d\n”, first);

2.水仙花数是怎么定义的呢,简单点就比如153=1^3 + 5^3+ 3^3,由于我们使用的是简单的循环语句,暂时不用到函数,所以我们需要对一个数进行循环相乘。比如1的三次方我需要循环相乘3次来得到。而在数循环相乘之前,我们需要对这个数进行拆分。比如:153拆分成1 5 3三个独立的数值。

do {
int d = t;
d %= 10;
t /= 10;

} while (t > 0);

一位一位进行取余处理,这样循环多次即可分离出各个独立的数值。

3.分离出来的独立的数值还需进行自乘,1的三次方=1*1*1,我们可以用循环语句来实现。

int j;
int p = d;
for (j = 1; j < n; j++) {
p *= d;
}

4. *后,便是判断,定义一个sum,如果sum=i,我们即可输出这个sum为水仙花数

sum += p;

if (sum == i) {
printf(“%d\n”, sum);

}

*后,输出即可。总代码如下:

#include<stdio.h>

int main() {
int n;
scanf_s(“%d”, &n);
int first = 1;
int i = 1;

for (i = 1; i < n; i++) {            //确定范围
first *= 10;
}
printf(“%d\n”, first);
i = first;

while (i < first * 10) {            //遍历寻找水仙花数
int t = i;
int sum = 0;
do {                                 //对数进行拆分处理
int d = t;
d %= 10;
t /= 10;
int j;
int p = d;
for (j = 1; j < n; j++) {
p *= d;

}
sum += p;
} while (t > 0);

if (sum == i) {                 //判断是否为水仙花数
printf(“%d\n”, sum);
}
i++;
}
return 0;
}

记录自己学习c语言的路程,加油。