简单算法练习
一、水仙花数(narcissistic number)
1.问题描述:什么是水仙花数
水仙花数
是指一个3位数,它的每个位上的数字的3次幂之和等于他本身(1^3 + 5^3 + 3^3 = 153)。
注意:水仙花数只是`自幂的一种
- 一位自幂数:独身数
2.两位自幂数:没有
3.三位自幂数:水仙花数
4.四位自幂数:四叶玫瑰数(四叶玫瑰数是指四位数各位上的数字的四次方之和等于本身的数。)
5.五位自幂数:五角星数
6.六位自幂数:六合数
7.七位自幂数:北斗七星数
8.八位自幂数:八仙数
9.九位自幂数:九九重阳数
10.十位自幂数:十全十美数
2.问题分析
根据水仙花数
的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为s),若s与给出的三位数相等, 三位数为“水仙花数”,反之,则不是。
3.算法设计
“水仙花数
”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是 100〜999。对应的循环条件如下:
for(n=100;n<1000;n++)
{
//......
}
上述代码说明
- 将n除以100,得出在百位上的数字hundred;
- 将(n-i*100)整除以10(或将n先整除以10再对10求模n/10%10),得出n在十位数上的数字ten;
- 将n对10取余,得出n在个位上的数字unit
求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数
C语言实现
#include <stdio.h>
int main()
{
int hun, ten, unit,n;
printf("result is:")
for(n=100;n<1000;n++) /*整数的取值范围*/
{
hun = n/100;
ten = n/10%10;
unit = n%10;
if(n == hun^3 + ten^3 + unit^3) /*各位上的立方和是否与原数n相等*/
{
printf("%d ",n);
}
}
printf("\n");
return 0;
}
Java实现
/**
* @Description 水仙花数
* @Param XXX
* @Author gfl
* @Date 2021/3/9
* @Since 版本 1.1.1
*/
public class NarcissisticNumber {
public static void main(String[] args){
for (int i=100;i<1000;i++)
{
int a = i/100; //取得百位数
int b = i/10%10; //取得个位数
int c = i%10