基于基础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语言的路程,加油。